PHP Conference Japan 2024

sodium_crypto_aead_aes256gcm_is_available

(PHP 7 >= 7.2.0,PHP 8)

sodium_crypto_aead_aes256gcm_is_available檢查硬體是否支援 AES256-GCM

描述

sodium_crypto_aead_aes256gcm_is_available(): bool

此函式的回傳值取決於硬體是否支援硬體加速的 AES。

參數

此函式沒有參數。

回傳值

如果使用 AES-256-GCM 加密是安全的,則回傳 true,否則回傳 false

新增註解

使用者貢獻的註解 1 個註解

Soatok Dreamseeker
3 年前
libsodium 為 AES-GCM 提供「is_available()」API,而不是 ChaCha-Poly AEAD 加密演算法的原因是,與 OpenSSL 不同,libsodium 不會公開 AES-GCM,除非您的處理器支援硬體加速的 AES 和 PCLMULQDQ 指令。

如果您想知道那是什麼意思:軟體 AES 容易受到快取時序漏洞的攻擊,因為它內部依賴於表格查詢:https://cr.yp.to/antiforgery/cachetiming-20050414.pdf (PDF)

GCM(稱為 GMAC 或 GHASH,取決於上下文)中的身份驗證步驟也存在類似的攻擊,它會洩漏 GHASH 金鑰(稱為 H),並且可以自由地用於執行選擇密文攻擊。

- 您可以在這裡了解有關 GCM 漏洞的更多資訊(在重用 nonce 而不是時序洩漏的情況下,但結果相同):https://www.youtube.com/watch?v=uxuXFK5XKEU

- 您可以在這裡了解有關 AES-GCM 的更多資訊:https://soatok.blog/2020/05/13/why-aes-gcm-sucks/

- 您可以在這裡了解它與其他加密模式的比較:https://soatok.blog/2020/07/12/comparison-of-symmetric-encryption-methods/

其他 AEAD 模式可以安全地在軟體中實現,而沒有側通道洩漏的風險。

重點是:AES-GCM 無法保證在所有硬體上都可用,因為如果沒有硬體支援,libsodium 將不會提供不安全的實作。

如果您想要保證在您無法控制的硬體上也可用的東西(您好,開源維護者),您的選擇是 ChaCha20-Poly1305 和 XChaCha20-Poly1305。

如果您可以控制硬體並明確需要 AES-GCM(注意:用於 FIPS 140-2 驗證),請隨意使用 AES-256-GCM。

<?php
function do_something(string $message, CryptoKeyObject $key): string {
if (!
sodium_crypto_aead_aes256gcm_is_available()) {
throw new
Exception("您的硬體上沒有 AES-256-GCM");
}
// ... 您的程式碼在這裡 ...
}
?>
To Top