AES 標準 C 庫實現
我正在努力在其中一個RISCV ISA處理器上實現 AES(128/256 - 任一個),然後通過在 RISCV ISA 中引入自定義指令來提高性能。
我是一個加密新手,併計劃使用 NIST 測試向量來驗證這個 C 程式碼。
我需要知道以下事情
1)是否有一個連結,我可以在其中找到使用標準 C 庫的 AES 實現?
2)我必須使用一些散列方案和 AES 嗎?如果是,是哪一個?
- 使用 NIST 測試向量驗證我的 AES C 程式碼是個好主意嗎
4)您是否建議改用加密庫?如果是這樣,我在哪裡可以找到它?
不要創建自己的密碼,不要實施密碼。
是否有一個連結,我可以在其中找到使用標準 C 庫的 AES 實現?
您可以在Rijndael 的設計,第 E 節,第 221 頁中找到 AES 的 C 實現。在 D 節中還提供了測試向量。但是,不建議使用此實現,因為它容易受到記憶體定時攻擊:
- 對 AES 的記憶體定時攻擊。: 丹·J·伯恩斯坦
- 記憶體攻擊和對策:AES、Dag Arne Osvik、Adi Shamir 和 Eran Tromer 的案例
- 更快且抗時序攻擊的 AES-GCM:Emilia Kasper 和 Peter Schwabe
我必須使用一些散列方案和 AES 嗎?如果是,是哪一個?
僅當您想提供真實性/完整性時才需要散列方案(請參閱MAC方案,有關此內容的更多資訊,請參閱此處)。因此,擁有一個散列方案完全獨立於你的 AES 實現。但是,您可能希望查看帶有GCM、EAX或CCM的 AES 以提供身份驗證。
對於散列函式,如果按照標準,建議至少使用SHA-256甚至更好的SHA3-256(NIST 在FIPS 202中指定)。
使用 NIST 測試向量驗證我的 AES C 程式碼是個好主意嗎
這不僅僅是一個好主意。這是必需的。但是,使您的實現工作並產生與測試向量相同的結果並不能保證您的實現是正確的(它仍然使您確信您的程式碼可能是正確的)。您必須檢查實現的每個部分是否與算法的規範相匹配。
您是否建議改用加密庫?如果是這樣,我在哪裡可以找到它?
**強烈建議使用加密庫。**它將防止您遭受記憶體定時攻擊和其他討厭的事情。它還保證了程式碼的正確實現。至於使用哪個庫,在發帖時(2016 年 10 月),您可以查看OpenSSL、Libsodium或NaCl。