Integrity

如何確保“收到的價值”不被改變?

  • January 18, 2014

我有一個程序(人們可以下載並在他們自己的電腦上執行),它每天會計算幾個未知*值。*為簡單起見,我們假設計算很簡單Rand(0, 1)。程序將執行,使用者將獲得一個值,例如0.230957203975.

然後他會將這個值廣播給任何感興趣的人。他會說“我今天的號碼是 0.230957203975!”。問題是使用者可以簡單地謊報數字。

我們如何才能使使用者不能說謊?或者更確切地說,如果他說謊,我們如何才能發現它?

我想出了一個解決方案,但它低於標準並且很容易被擊敗。我的解決方案是廣播該值0.230957203975以及這樣計算的驗證值

verification_value = SHA2(MD5(RIPEMD(SHA2(HAVAL(GOST(MD5(0.230957203975)))))))

問題是使用者可以檢查機器程式碼,並且知道所使用的雜湊函式的模糊混合,使他能夠自己計算驗證值並謊報他得到的數字。

我瀏覽了Applied Cryptography,但那裡提到的協議似乎都沒有解決方案。密碼學能夠解決這個問題嗎?

從我的角度來看,多重雜湊會減慢速度,但在這種情況下它不會增加您正在尋找的安全性。

密碼學能夠解決這個問題嗎?

是的。您需要的是消息驗證碼 (MAC),它是用於驗證消息並為消息提供完整性和真實性保證的一小段資訊。完整性保證檢測意外和有意的消息更改,而真實性保證則確認消息的來源。

為了您的進一步研究,“MAC”和“HMAC”是相關的關鍵詞。

Nota Bene:在 bis comment中,@fgrieu 暗示實際上使用帶有 SHA256 的 HMAC ……這確實似乎是最合乎邏輯的選擇(因為它在目前提供預期的安全性時非常少)。

如果您想確保值在傳輸過程中不會被佔用線路的主動攻擊者更改,那麼您需要一個完整性機制,以保證沒有人篡改消息。此類機制通過使用消息認證程式碼 (MAC) 來實例化,該程式碼建構在諸如分組密碼和散列函式之類的安全加密原語之上。

還有你說的撒謊是什麼意思?是不是在輸入一種 $ a $ ,F(一種)=b $ f(a)=b $ 並且使用者送出C $ c $ 反而。然後你只需發布函式。另一方面,如果你想說服對方你簽署和發送的值是對函式的真實可靠的評估,那麼你需要一個零知識證明的輸出知識如果您想對值保密,請使用函式

引用自:https://crypto.stackexchange.com/questions/12995