該代碼被加密(沒有人可以看到該程序的源代碼)。
這是一個謬誤。除非你使用的是一個安全的處理器,它可以將內存解密到操作系統無法讀取的內存中,否則你的程序永遠不會真正加密。當然,原始的python可能是隱藏的,但是從彙編中,一個有技能的人可以很容易地收集正在發生的事情。
因此,這是一種數據安全問題:默默無聞的安全性不適用於通用硬件。特別是與Python等相對較高級別的東西無關。
現在我的問題。我需要確保存儲在我的數據庫中的數據沒有被修改。
那是確實是一個難題。問題在於:如果某人能夠完全重建程序的狀態,那麼他們還可以重建數據不同時加密所做的事情。
有幾種解決方法。但最終,它們都分解爲一個原則:
您需要一些硬件設備,它可以加密您的數據,並證明它沒有被篡改,例如,通過保存已加密了多少東西的計數器。所以,如果你的數據庫中有例如100個已經被你的安全的,無法複製的加密硬件加密的東西,並且它顯示它只被使用過100次,那麼你沒事。例如,如果該硬件總是會「加密(輸入字節+時間戳)」,則同樣適用。
你不能在通用操作系統的軟件上做到這點 - 總是可以使用修改後的數據運行軟件,並且只需要修補正好及時訪問的物理內存。
所以,你需要什麼特定的硬件。感覺像加密智能卡可以做類似的事情,但我不知道它是否包含保留計數器或包含時間戳的功能。
可能工作的一個解決方案基本上使用流密碼來確保整個數據「流」的完整性。在這裏,祕密的一部分是加密算法所在的狀態。想象一下:你有一張帶有密鑰對的智能卡,該密鑰對自己在卡上生成。你把另一把鑰匙放在你的地窖裏。
- 在裝運設備之前,您先加密一些祕密。這使得智能卡處於惡意篡改者無法猜測的狀態。
- 您加密第一個值,保存輸出。這改變了內部狀態!
- 您加密並保存已知單詞或序列的輸出重複2. + 3.對於所有其他要存儲的值。
最後,您使用您存儲在地下室中的密鑰解密數據庫中的數據。由於內部狀態必然隨着輸入數據而改變(即,兩次加密相同的數據不會得到相同的結果!!),所以如果你從記錄中缺少某些東西,數據就不能正確解密。您可以立即通過已知單詞生成的輸出進行檢查。
外賣
什麼你想要做的是硬 - 這即是:
上,你有沒有控制權,並具有保證的真實性硬件上運行的軟件它生成的數據。
現在,不可能的部分實際上是確保數據在進入你的軟件之前沒有被篡改過 - 誰說,例如,你的溫度傳感器的驅動程序沒有被某些東西總是說「-18°C」?爲了避免人們篡改軟件的能力,您需要硬件來強制執行非篡改。這不是你可以在PC風格的硬件上做的事情,除非你禁用所有的調試可能性並確保你有安全的啓動能力。
修改時間?在同一天或之後?你究竟想要保護什麼?數據損壞,錯誤的API或篡改?您可以添加時間戳到您的對象,事務ID,編程它只能寫一個新的對象,然後它變成只讀。這麼多的選項,但很少的信息 – hmedia1
請參閱https://docs.python.org/3/library/uuid.html和https://docs.python.org/3/library/hmac.html –
這聽起來像你需要哈希函數,可以映射溫度+日期<=> ID – Miket25