Aes

等效於 Rijndael 實現的 Node.js/OpenSSL 加密庫

  • March 10, 2018

我有一個 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 實現相同的輸出,但失敗了。

任何指針?

AESRijndael,但僅適用於塊大小 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,所以也許不知道。

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