試圖從雜湊算法中理解為什麼雜湊值更安全
我目前在美國上大學,實際上對比特幣和加密貨幣整體感到好奇。我開始在斯坦福大學和紐約大學等免費大學網站上尋找,甚至嘗試對他們過去的論文進行提問。我回答了大部分問題,但我被困在一個問題上:
Suppose your professor wants to award each student in the class a random priority for office hours help by giving them a number H(studentID||Bi) where Bi is the ith block header in the Bitcoin blockchain.Would the scheme be me more secure if you instead used H(studentID||Bi-1|| Bi)?
( <https://cs.nyu.edu/courses/fall17/CSCI-GA.3033-019/assignments/practice_final.pdf> )我知道如果你使用它可能會更安全,
Bi-1
因為你有更多的輸入來生成輸出,但我覺得這不是原因。
給他們一個數字 H(studentID||Bi),其中 Bi 是比特幣區塊鏈中的第 i 個塊頭。如果你改為使用 H(studentID||Bi-1|| Bi),這個方案會更安全嗎?
對於這個問題,比特幣標頭 Bi = H(Bi-1 || other stuff)。在 H() 行為的黑盒假設下,這兩種方案實際上是等價的。
你真的不能說 H(id || Bi-1 || H(bi-1||stuff)) 比 H(id || H(Bi-1||stuff)) 更安全’更多數據’ 因為 H() 很可能有一個內部瓶頸 例如它可以實現 H(bytes[0 .. n]) = H(H(…H(H(H(bytes[0])|| bytes[1])||bytes[2])…||bytes[n]) (事實上,sha256 確實像這樣工作,儘管一次不是一個字節)。
如果沒有更正式的“安全”定義,我認為不可能只回答這個問題。但是猜測一個含義“有人可以更容易地在一個而不是另一個下操縱他們的辦公時間” - 答案是否定的。
雜湊只是將事物匯總為唯一 ID 的一種方式。
散列包含的元素越多,就越難破解它,如果你反轉一個散列,它會導致原像攻擊,並且散列的算法將毫無用處,因為你會破壞它的主要概念,即散列(而不是加密)
如果每個人都知道雜湊的計算方式,那麼每個人都可以偽造雜湊(在比特幣中,每個人都知道它的計算方式,因為這是節點可以驗證雜湊是否有效的方式,從而知道區塊鍊是否被修改)。話雖如此,您可能需要考慮散列順序的秘密,以使其“安全”。
雜湊安全本身是通過破壞它的難度來衡量的。Sha256 是最強大的雜湊之一,因為它幾乎不可能產生原像攻擊,但如果你需要讓它更安全,你可以雜湊雜湊 H(H1(H0))
其中 H0 是第一個雜湊。
這樣一來,破解它就會變得更加困難,(你用來散列資訊的輪數越多,指數就越難)。
我希望這能讓你理解。