2014-07-01 50 views
3

在C/C++中使用OpenSSL加密庫時,EVP接口是否自動支持AES-NI硬件加速(假設支持處理器)?參考this,看起來命令行OpenSSL確實有支持。我想知道是否有特定的函數調用,我不得不利用這種支持。支持AES-NI的EVP接口

例如,如果我使用EVP_EncryptInit_ex(ctx, type, imp, key, iv),那麼這些參數中的任何一個都必須指定NI加速度?即將EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv)做詭計?

謝謝!

+0

您引用的頁面*實際上解釋了'EVP_'函數會自動檢測AES-NI。 –

+0

這個問題在OpenSSL中引發了一個文檔補丁。請參閱[PR 3416:PATCH:EVP_EncryptionInit和AES-NI註釋](https://rt.openssl.org/Ticket/Display.html?id=3416)。 – jww

回答

4

當C/C++使用的OpenSSL加密庫,莫非EVP自動接口支持AES-NI

是。 EVP_*是確保使用AES-NI的官方/支持方式(如果可用)。事實上,EVP是通常訪問硬件加速的唯一方法。

EVP_*也是獲得其他硬件加速的唯一方法,例如在Skylark下使用Intel的ia32 SHA加速; ARM的Crypto擴展在ARMv8中提供;以及威盛的處理器上的ia32 Padlock擴展。

使用低級別的AES例程(如AES_encryptAES_decrypt)只是軟件實現,他們絕不會像AES-NI那樣使用硬件加速。另請參閱Henson博士在OpenSSL郵件列表Verify AES-NI use at runtime?上的回覆。 (1)如何確定是否正在使用AES-NI;(2)如何確定是否正在使用AES-NI;(2)和(2)什麼是基準測試結果。爲此,請參閱How can I check if OpenSSL is support/use the Intel AES-NI?

+0

作爲後續,命令行實用程序'openssl enc'是否也會自動觸發硬件加速? 謝謝! –

+0

@ MVK_1 - 對不起,回覆晚了。是的,像'openssl enc'和'openssl dec'這樣的子命令將使用AES-NI(如果可用)。一些子命令需要'-evp'選項,比如'openssl speed'。另請參閱[如何檢查OpenSSL是否支持/使用Intel AES-NI?](http://stackoverflow.com/q/25284119) – jww