等效於 Rijndael 實現的 Node.js/OpenSSL 加密庫
我有一個 Rijndael 函式,我在 MILENAGE 算法(ETSI TS 135 206 V14.0.0 (2017-04))的技術規範中將其實現為 C 參考實現的 JavaScript 埠。我的JavaScript 埠工作正常,已通過實際 SIM 卡的成功身份驗證得到驗證。
我沒有使用在 JavaScript 中實現的東西,而是想知道是否可以在 Node.js/OpenSSL 的內置密碼中找到一個等效的密碼,以 (1) 避免自己滾動 (2) 利用使用編譯後的潛在性能增益執行。
我沒有看到 TS 提到在參考實現中使用了一種特殊的 Rijndael 風格(甚至有多種風格的 Rijndael 嗎?)。硬編碼的S盒表總是這樣嗎?
我也不太清楚 AES 和 Rijndael 的關係是什麼。如果 AES 基於 Rijndael,我能否找到與我擁有的參考 Rijndael 實現相匹配的 AES 風格?
當我列舉 Node.js 的加密庫中可用的密碼時,我得到:
> 需要('crypto').getCiphers() ['CAST-cbc', 'aes-128-cbc', 'aes-128-cbc-hmac-sha1', 'aes-128-ccm', 'aes-128-cfb', 'aes-128-cfb1', 'aes-128-cfb8', 'aes-128-ctr', 'aes-128-ecb', 'aes-128-gcm', 'aes-128-ofb', 'aes-128-xts', 'aes-192-cbc', 'aes-192-ccm', 'aes-192-cfb', 'aes-192-cfb1', 'aes-192-cfb8', 'aes-192-ctr', 'aes-192-ecb', 'aes-192-gcm', 'aes-192-ofb', 'aes-256-cbc', 'aes-256-cbc-hmac-sha1', 'aes-256-ccm', 'aes-256-cfb', 'aes-256-cfb1', 'aes-256-cfb8', 'aes-256-ctr', 'aes-256-ecb', 'aes-256-gcm', 'aes-256-ofb', 'aes-256-xts', 'aes128', 'aes192', 'aes256', 'bf', 'bf-cbc', 'bf-cfb', 'bf-ecb', 'bf-ofb', '河豚', 'camellia-128-cbc', 'camellia-128-cfb', 'camellia-128-cfb1', 'camellia-128-cfb8', 'camellia-128-ecb', 'camellia-128-ofb', 'camellia-192-cbc', 'camellia-192-cfb', 'camellia-192-cfb1', 'camellia-192-cfb8', 'camellia-192-ecb', 'camellia-192-ofb', 'camellia-256-cbc', 'camellia-256-cfb', 'camellia-256-cfb1', 'camellia-256-cfb8', 'camellia-256-ecb', 'camellia-256-ofb', '山茶花128', '山茶花192', '山茶花256', '投擲', 'cast-cbc', 'cast5-cbc', 'cast5-cfb', 'cast5-ecb', 'cast5-ofb', '的', 'des-cbc', 'des-cfb', 'des-cfb1', 'des-cfb8', 'des-ecb', 'des-ede', 'des-ede-cbc', 'des-ede-cfb', 'des-ede-ofb', 'des-ede3', 'des-ede3-cbc', 'des-ede3-cfb', 'des-ede3-cfb1', 'des-ede3-cfb8', 'des-ede3-ofb', 'des-ofb', 'des3', '德克斯', 'desx-cbc', 'id-aes128-CCM', 'id-aes128-GCM', 'id-aes128-wrap', 'id-aes192-CCM', 'id-aes192-GCM', 'id-aes192-wrap', 'id-aes256-CCM', 'id-aes256-GCM', 'id-aes256-wrap', 'id-smime-alg-CMS3DESwrap', '主意', '想法-cbc', 'idea-cfb', 'idea-ecb', 'idea-ofb', 'rc2', 'rc2-40-cbc', 'rc2-64-cbc', 'rc2-cbc', 'rc2-cfb', 'rc2-ecb', 'rc2-ofb', 'rc4', 'rc4-40', 'rc4-hmac-md5', '種子', '種子-cbc', '種子-cfb', '種子-ecb', '種子-ofb']
我從上面測試了一組隨機的 AES 密碼(基於未受過教育的猜測),看看我是否可以獲得與參考 Rijndael 實現相同的輸出,但失敗了。
任何指針?
AES是Rijndael,但僅適用於塊大小 128 和密鑰大小 128、192、256。Rijndael 還支持大小為 256 的塊,例如和其他(中間)密鑰大小。但是 AES 是官方標準,這個標準只要求一個塊大小 128 和這三個密鑰大小。S-box 是相同的,而且非常固定,是的。任何好的 Rijndael 實現都應該與 AES 兼容,並具有正確的參數。
aes-128-ecb 應該是 128 位密鑰的標準 AES。其他的也是 iv 的模式,ecb 只是“同時加密一個塊”,塊之間沒有混合。其他鍵大小 192 和 256 同上。我想 aes128 應該與 aes-128-ecb 相同?我根本不知道 Node.js,所以也許不知道。