簽名很短?(例如:48 位?)
我們的應用程序需要我們發行的代幣(約 200 字節)的某種“溫和”形式的“來源證明”,然而,每個的價值都是微不足道的。要求是提供“防篡改”而不是“不可偽造”,不讓代幣膨脹,並使用常用的“標準”庫和工具。
在令牌中,我們包含了我們收到的請求的雜湊,我知道我們可以很容易地將其裁剪到最後 n 位(例如 48 位),並在簽名之前對令牌雜湊/摘要執行相同的操作。
簽名是否可能發生類似的事情,還是我們只需要生成最小的密鑰和最小的摘要來使輸出盡可能小?
我一直在糾結 openssl rsautl - 考慮到我們上面的要求,這和其他任何東西一樣好嗎?簽名以約 24 個字節出現,如果可能的話,我想進一步減少它。
編輯添加
對我們來說,在幾分鐘內偽造一個簽名的能力是非常好的,亞分鐘就會有問題。獲取我們的私鑰並隨後以可忽略的時間/精力成本批量生產偽造簽名的能力是主要風險。
根據以下人員的建議,我一直在研究 ECDSA 和 secp112r1 OpenSSL 內置曲線,假設它比 256 位 RSA 主鍵更好。
假設您有一個創建 48 位簽名的非對稱算法。然後攻擊者可以簡單地測試可能的 48 位簽名並找到一個驗證 $ 2^{47} $ 平均嘗試。即使使用相對較慢的非對稱算法也是可行的,特別是如果攻擊者可以為多個令牌測試相同的簽名。這只是一種蠻力攻擊,非對稱系統通常允許更快的攻擊。
如果你能建立一個對稱的秘密,即使是一個短的 MAC 也好得多,因為雖然攻擊者仍然有一個 $ 2^{-48} $ 隨機猜測的成功機率,他們無法再離線驗證這些猜測。
一個類似的(後來的)問題問:
哪些數字簽名方案可用於僅生成 16-32 位的小簽名?
無。任何這種大小的數字簽名都是不安全的。基本論點:驗證過程是公開的(數字簽名的定義屬性)這一事實允許偽造一個 $ b $ - 位簽名最多 $ 2^b $ 簽名驗證操作。這遠非實踐中最好的攻擊。
基於已知的簽名方案,似乎我們至少需要 $ 2b $ -bit 簽名來抵抗 $ \mathcal O(2^b) $ 努力(不過,我沒有明確的論據來證明這對於任何簽名方案都必須成立)。我們擁有的最緊湊的BLS 簽名僅接近該門檻值。即使使用 128 位簽名,通過適度的方式從公鑰中恢復私鑰也是可行的。這樣就可以像私鑰的合法持有者一樣快地計算任何東西的簽名。
任何足夠強大的簽名在硬體級別不會在幾納秒內被破壞,這對於我的應用程序來說是好的,這是時間關鍵的。
問題的簽名是短暫的這一事實無助於抵禦恢復私鑰的攻擊。在某種程度上會有所幫助的是密鑰是短暫的,但這是不切實際的。
對於使用 32 位或更低位密碼的身份驗證,只能使用對稱密碼。這需要驗證方的秘密。那是Message Authentication Code,而不是數字簽名,並且與任何問題的標籤都不匹配。