chacha20-poly1305 в PHP с OpenSSL - PullRequest
       38

chacha20-poly1305 в PHP с OpenSSL

0 голосов
/ 21 февраля 2019

Я использую PHP 7.2.8.Согласно openssl_get_cipher_methods chacha20-poly1305 является поддерживаемым алгоритмом:

echo in_array('chacha20-poly1305', openssl_get_cipher_methods()) ? 'yes' : 'no';

, который выводит "да".

Поэтому я попытался использовать chacha20-poly1305:

$plaintext = 'zzzzzz';
$key = str_repeat('k', 32);
$nonce = str_repeat('n', 12);
$aad = '';

$r = openssl_encrypt(
    $plaintext,
    'chacha20-poly1305',
    $key,
    OPENSSL_RAW_DATA,
    $nonce,
    $newtag,
    $aad
);

echo bin2hex($r);

Это выводит предупреждение PHP:

Предупреждение: openssl_encrypt (): аутентифицированный тег не может быть предоставлен для шифра, который не поддерживает AEAD

$r был f4854428b8a8.

Мне удалось получить такой же вывод для r с chacha20 (т.е. без poly1305, выполнив это):

$r = openssl_encrypt(
    $plaintext,
    'chacha20',
    $key,
    OPENSSL_RAW_DATA,
    "\1\0\0\0" . $nonce
);

Тот факт, чтовывод означает то же самое, что код аутентификации Poly1305 не добавляется и не добавляется к зашифрованному тексту.

У меня вопрос ... как получить код аутентификации Poly1305 с использованием OpenSSL в PHP?

Кроме того, я знаю, что libsodium предоставляет поддержку chacha20-poly1305, но мне, тем не менее, все еще интересно, как он должен работать с OpenSSL.

...