物聯網設備的最小可能證書
我正在開發一個物聯網系統,它使用通過射頻連接的小節點。這允許消息長度低於 250 字節。您可以在https://github.com/gmag11/EnigmaIOT查看。
所有消息都使用 ChaCha20+Poly 加密,並使用 DiffieHellman 算法獲得動態密鑰。但是第一個關聯僅受共享密鑰的保護,因此擁有該密鑰的任何人都可以加入網路。
我想在節點和網關之間使用相互證書身份驗證,同時保持關聯期間的消息數量盡可能少。
您可以建構的最低限度、足夠安全的證書是多少?如何使用 OpenSSL 生成它?
有一個與此類似的先前問題,但我想我的情況不受限制。使用幾個字節在 IoT 設備上進行證書驗證
也許這裡有另一種解決方案
謝謝
您可以建構的最低限度、足夠安全的證書是多少?如何使用 OpenSSL 生成它?
通常,如果要低於 256 字節,則需要展平證書。由於 ASN.1 樹結構,X.509 版本 3 證書具有一定的成本。因此,這些都沒有達到應有的效率。
對於智能卡系統,通常使用所謂的**“卡可驗證”證書**。CVCertificates 是通常也使用 ASN.1 指定的專有結構。但是,他們嘗試使用最少的字節,通常是 a
SEQUENCE
ofOCTET STRING
s 和可能的幾個INTEGER
’s 和OID
’ 混合在一起。他們還將使用扁平化的公鑰和簽名,其中使用最少的成本。例如,如果使用橢圓曲線 (ECDSA),則可能使用專用命名曲線,或使用曲線的單字節指示。那麼(壓縮的)公鑰將只是一個
OCTET STRING
包含壓縮的 X 或未壓縮為靜態大小的無符號整數的 X 和 Y 的單個密鑰。類似地,簽名不會被 DER 編碼,而只是由 R 和 S 的串聯組成。通常你會避免使用 RSA。RSA 可以以這樣一種方式使用,即簽名的一部分實際上包含證書本身的數據。為此,使用了“提供消息恢復的數字簽名方案”。然而,這些方案相當少見。更重要的是,2048 位 RSA 密鑰僅允許大約 88 位安全性(例如,與 AES 密鑰相比),並且已經佔用了 256 個字節的簽名,而公鑰僅佔用了 256 個字節的模數。因此,通常首選 64 字節 ECC 簽名和 33 / 65 字節公鑰(例如,提供大約 128 位安全性的 P-256 或 ed25519)。
OpenSSL 命令行不支持 CVCertificates。通常 CVCertificates 是為特定目的而建構的。OpenSSL 庫當然可以用於 ASN.1 / DER 功能和加密功能。Java / Bouncy Castle 庫內置了一些 CVCertificate 功能,該功能可能僅與 ePassport 規範兼容(用於訪問智能卡晶片上的生物特徵 - 或者至少可以用於此目的)。
目前,EJBCA(一種開源 Java EE 證書頒發機構)提供與 ePassport 標準兼容的 CVCertificate 支持。請注意,該軟體的使用和設置相對棘手。由於它是開源的,您可能可以調整證書格式以滿足您的需求。但無論你做什麼,你都在進入一個相當專業的領域(……歡迎!)
這裡有兩個問題:最低限度是多少,以及您可以建立的最低標准證書是多少。正如 Maarten Bodewes 的回答所指出的,前者比後者短。
如果您願意超出 OpenSSL 支持的範圍,您可以修改客戶端和伺服器以僅發送/接收證書的非常量位,並對其餘部分進行硬編碼。Microchip/Atmel 的 ATECC 晶片需要這樣做以節省空間。本應用筆記介紹了他們的方法。這使您可以將證書的所有非常量資訊儲存在 72 個字節中。如果您不需要多個實體簽署設備證書,則可以額外節省 3 個字節。跳過他們的自定義格式資訊可以再節省 2 個字節。因此,一個相當安全的 ECC 證書的最低要求是 67 個字節。