Hmac

6502 CPU 能否在合理的時間內安全地計算 SHA-1 雜湊?

  • August 15, 2018

6502 是 Tamagotchi 中的 CPU(可以被黑客入侵以執行自定義程式碼)。SHA-1 是用於 TOTP(雙因素身份驗證令牌和應用程序使用的算法)的預設雜湊值。希望你現在明白我為什麼要問這個。

(鑑於這種情況,這將是幾十個字節的輸入,不到一秒左右的時間)

的,6502可以在合理的時間內計算SHA-1:小於 $ \lceil(k+9)/64\rceil/5 $ 第二個 $ k $ 1 MHz 6502 上的字節消息,如 1977 年[Apple ]。例如 0.2s 最多 55 個字節。我們需要大約 128 字節的 RAM,不包括散列消息。程式碼可能適合 1 KB 的程式碼,包括常量。

注意:我不知道 Tamagoshi 上的時鐘速度、RAM 和程式碼大小資源。

我基於我為8031/8051編寫的商業實現,另一個 8 位 CPU(來自舊文章)。我的 660 字節程式碼(包括表格和 C 介面)遠低於每 64 字節塊 50,000 個 CPU 週期(寄存器上的許多指令是 1 個週期,外部儲存器訪問是 2 個週期;一個週期持續 12 個外部時鐘週期)原始 8051,常見變體將其減少到 6 個或更少)。該程式碼沒有完全優化到最大速度,因為客戶缺乏易於定址的內部 RAM,並且程式碼大小也是一個考慮因素。在 6502 上,我估計 CPU 週期數將少於使用零頁定址的展開程式碼的 4 倍,即少於 200,000 個週期。如果事情可以減少到 120,000 個週期左右,我不會感到驚訝。我贊同 Poncho 的評論,即 83,700 個週期似乎相當樂觀。

最自然的程式碼是恆定時間的,因此至少很容易避免時序旁通道。如果對手可以接近硬體,探測和電源/電磁發射分析是可信的安全威脅。

注意:我知道沒有使用 6502 的安全 CPU,但很多人使用 6805 或衍生產品,它們是非常可比的 8 位 CPU。有些仍在積極使用中。

在 Tamagotchi 發布的同一年,90MHz Pentium cpu 上的 SHA-1 需要 837 個週期才能完成,假設由於指令寬度和每個週期指令的差異,在 6502 上需要 8 倍(我可能會走得很遠,所以我將在此處使用 10X 作為基線)。

1MHz 下的 8370 個週期不到 100 秒。即使比這慢幾倍,因為如果記憶體定址的速度和用於輸入擴展的記憶體,它應該仍然在1s以下。我的混合 TOTP 每 86.4 秒(每天 1000 次)生成一個新程式碼,這給了足夠的時間來輸入和驗證程式碼,所以我想說 6502 確實能夠從單個生成 HMAC-SHA-1 雜湊迭代輸入(時間碼),並在合理的時間長度內為使用者格式化截斷值。

更多細節

看起來 Tama-Go(更新的單元)上的 CPU 實際上以 8MHz 執行,並集成到顯示控制器中。它有 1536B 的 RAM 和 320K 的 ROM,對於計算雜湊值應該綽綽有餘。

根據 Poncho 的評論,我查看了 6502 的指令延遲,在最壞的情況下它們大約為 6 個週期,而 pentium 平均不到 1 個(837 個週期中的 1469 條指令)。如果我的 10 倍猜測是準確的(事實並非如此),那意味著 1MHz 的雜湊迭代需要 88 毫秒。

但是,6502 似乎沒有可變的位旋轉和移位,它一次是 1,所以我的 10 倍猜測可能是 20 倍,儘管在 8MHz 下,半秒內仍然是 1 次 HMAC-SHA-1 迭代。

如果您想嘗試一下,Tama-go 有一個基於 Web 的模擬器,您可以自己了解完成這項工作需要多少程式碼和 CPU 週期。

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