2 回答

TA貢獻(xiàn)1900條經(jīng)驗(yàn) 獲得超5個(gè)贊
聽(tīng)起來(lái)您想防止敏感數(shù)據(jù)保留在內(nèi)存中。但是您是否考慮過(guò)數(shù)據(jù)可能已被復(fù)制或交換到磁盤(pán)?

TA貢獻(xiàn)1883條經(jīng)驗(yàn) 獲得超3個(gè)贊
在將緩沖區(qū)清零并將其傳遞給另一個(gè)函數(shù)后檢查(部分)緩沖區(qū)內(nèi)容怎么樣?例如:
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])
}
為了絕對(duì)安全,您可以將傳遞的緩沖區(qū)內(nèi)容與隨機(jī)字節(jié)進(jìn)行異或,但如果/由于歸零未優(yōu)化,則if永遠(yuǎn)不會(huì)到達(dá)主體。
您可能認(rèn)為一個(gè)非常智能的編譯器可能會(huì)推斷出上述copy()零privateKey[0],從而確定條件始終為假,并且仍然將其優(yōu)化掉(盡管這不太可能)。解決這個(gè)問(wèn)題的方法不是使用make([]byte, keySize)來(lái)自全局變量或函數(shù)參數(shù)的切片(其值只能在運(yùn)行時(shí)確定),因此編譯器不能足夠聰明地推斷條件將始終為假在編譯時(shí)。
- 2 回答
- 0 關(guān)注
- 155 瀏覽
添加回答
舉報(bào)