Подтвердить что ты не робот

OpenSSL с использованием API EVP против алгоритма для симметричного шифрования

Привет, я установил openssl на свою Linux-машину и просматриваю файлы заголовков и документацию (которая очень высока:().

Я пытаюсь построить проект (в 'c'), который использует симметричные криптоалговы (я сосредоточен на aes256cbc). Проблема в том, что я запутался, как в том, как использовать библиотечные функции в моем коде.

Для моей реализации aes256cbc я могу напрямую использовать функции, определенные в заголовочном файле 'aes.h' (который появился мне в первую очередь).

Но в googling я подошел к некоторому учебнику для этого, который использует функции evp.h для этого http://saju.net.in/code/misc/openssl_aes.c.txt

Есть ли конкретная причина для этого или прямой доступ к функциям aes.h.

А также, если кто-то может указать мне на хорошую документацию/учебник любого типа на использование крипто-библиотеки openssl, мы будем очень благодарны.

большое спасибо

P.S простите меня, если я наивна

4b9b3361

Ответ 1

Использование API EVP имеет то преимущество, что вы можете использовать один и тот же API для всех симметричных шифров, поддерживаемых OpenSSL, в общем виде. Это упрощает замену используемого алгоритма или делает алгоритм настраиваемым пользователем на более позднем этапе. Большая часть кода, который вы пишете, не зависит от выбранного алгоритма шифрования.

Вот простой пример для шифрования с AES-256 в режиме CBC:

#include <stdio.h>
#include <openssl/evp.h>

int main()
{
    EVP_CIPHER_CTX ctx;
    unsigned char key[32] = {0};
    unsigned char iv[16] = {0};
    unsigned char in[16] = {0};
    unsigned char out[32]; /* at least one block longer than in[] */
    int outlen1, outlen2;

    EVP_EncryptInit(&ctx, EVP_aes_256_cbc(), key, iv);
    EVP_EncryptUpdate(&ctx, out, &outlen1, in, sizeof(in));
    EVP_EncryptFinal(&ctx, out + outlen1, &outlen2);

    printf("ciphertext length: %d\n", outlen1 + outlen2);

    return 0;
}

Для простоты я пропустил обработку ошибок.

IMO - одна из наиболее важных частей документации по OpenSSL - Сетевая безопасность с OpenSSL от Viega/Messier/Chandra. Это с 2002 года (0.9.7), поэтому не распространяется на изменения OpenSSL за последние 10 лет, но это ИМО все еще менее болезненный способ изучить OpenSSL, чем использовать только страницы руководства.

Ответ 2

В настоящее время OpenSSL wiki имеет хорошую документацию о том, как использовать семейство функций EVP: http://wiki.openssl.org/index.php/EVP

Другой потенциал использования API-интерфейса API EVP заключается в том, что EVP автоматически использует аппаратное ускорение (например, набор инструкций AES-NI), если он доступен. С алгоритмом API вам необходимо включить его вручную.