有沒有辦法將包含 e 的緩沖區歸零?G。使用私鑰后確保編譯器不會刪除未使用的歸零代碼?有件事告訴我一個簡單的事情:copy(privateKey, make([]byte, keySize))不保證留在那里。
2 回答

白板的微信
TA貢獻1883條經驗 獲得超3個贊
在將緩沖區清零并將其傳遞給另一個函數后檢查(部分)緩沖區內容怎么樣?例如:
copy(privateKey, make([]byte, keySize))
if privateKey[0] != 0 {
// If you pass the buffer to another function,
// this check and above copy() can't be optimized away:
fmt.Println("Zeroing failed", privateKey[0])
}
為了絕對安全,您可以將傳遞的緩沖區內容與隨機字節進行異或,但如果/由于歸零未優化,則if永遠不會到達主體。
您可能認為一個非常智能的編譯器可能會推斷出上述copy()零privateKey[0],從而確定條件始終為假,并且仍然將其優化掉(盡管這不太可能)。解決這個問題的方法不是使用make([]byte, keySize)來自全局變量或函數參數的切片(其值只能在運行時確定),因此編譯器不能足夠聰明地推斷條件將始終為假在編譯時。
- 2 回答
- 0 關注
- 147 瀏覽
添加回答
舉報
0/150
提交
取消