Signature

在 QR 碼上使用加密進行訪問控制

  • February 3, 2020

我想創建一個流程,讓註冊使用者在手機上收到一個二維碼,然後將這個二維碼呈現給相機。攝像頭應掃描二維碼,然後判斷二維碼是否合法,在這種情況下授予訪問權限。

根據我非常基本的理解,相機將配備一個“公鑰”,並且 QR 碼(發送給使用者)都應該使用匹配的“私鑰”生成。然後相機執行基本解碼並允許/拒絕訪問。

哪些加密技術適用?它們是如何使用的?

編輯

問題背後的核心是網路攝像頭需要驗證隨機二維碼的事件。這應該使用本地密鑰/雜湊來實現,而無需網路攝像頭連接到某個數據庫來驗證 QR 碼。所以我懷疑,我的問題是關於密碼學的一個非常基本的問題:相機是否可以將一些密鑰儲存在記憶體中(通常在 Rasberry Pi 上)並能夠驗證 QR 碼(同樣無需連接到網際網路)。如果我的問題是胡說八道,那麼請完全放棄。

問題是關於使用數字簽名來簽署訪問控制二維條碼

在最簡單的形式中,一些權威機構將生成並持有一個私鑰,相應的公鑰儲存在訪問控制系統中。具有訪問權限(例如,授權訪問的時間間隔和位置)的消息將由權威機構使用私鑰進行簽名,並使用(或在)簽名中編碼為二維條碼。門禁系統讀取二維條碼,從而獲得消息和簽名。然後根據消息和公鑰驗證簽名(即數字簽名的簽名驗證步驟),並且(僅在驗證成功的情況下)根據消息中的訪問權限是否允許訪問。

在不知道私鑰的情況下,除了逐字複製已知內容(消息和匹配簽名)之外,在密碼學上不可能製作可接受的二維條碼。特別是,任何更改消息的嘗試都將導致簽名驗證失敗,並且不會授予訪問權限。這是通過純粹的本地驗證過程獲得的,幾乎任何 CPU 都可以進行。

當訪問控制系統是分佈式的時,數字簽名的使用開始變得有意義:即使對設備進行逆向工程也不能讓一個偽造的二維條碼被接受。那是因為逆向工程無法獲取私鑰,因為它不存在。


可用於(並且經常使用)此應用程序的最常見簽名標準包括 DSA、ECDSA 和 EdDSA。對於 128 位安全性,簽名將增加 64 個字節。Raspberry Pi 功能強大,足以在幾分之一秒內執行 ECDSA 或 EdDSA 簽名驗證步驟。

如果我們想讓簽名產生的大小成本盡可能小¹(因為二維條碼中的資訊較少,最容易閱讀),還有短/原始Schnorr 簽名方案(128 字節為 48 字節) -位安全性),但AFAIK它不是標準化的²。還有BLS 簽名方案,但祝你好運找出安全參數,我什至不確定是否有任何收穫。

帶有消息恢復的數字簽名可能會有所幫助:它將一些消息嵌入到簽名中。對於短消息(大約 192 字節以下),此類方案的最佳標準是基於 DLP 的方案³,其實現與上述 Schnorr 方案大致相同的大小成本,具有更好的安全性和值得誇耀的標準。對於較大的消息,基於 RSA/Rabin 的方案⁴ 將成本降低到 34 個字節,並且還大大減少了驗證簽名的計算成本。


該系統的一個明顯問題是簽名的二維條碼仍然可以複製,包括作為螢幕截圖擷取並以電子方式發送。


筆記:

¹ 當然,消息大小應盡可能小。最好的方法是使用緊湊的編碼,或者當事後數據壓縮無法彌補糟糕的編碼時。這與加密貨幣無關。

² 或許是因為短 Schnorr 簽名的簡單安全論據並不嚴謹,而且最新進展複雜到難以解釋的地步。

³ 一些標準是 ISO/IEC 9796-3 和 X9.92-1,參見參考書目;謹防專利雷區。

ISO/IEC 9796-2方案 3。它不是受專利保護的 AFAIK,但該標準本身在法律上不能免費線上獲得。

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