opensslの研究

GitHub - フライドポテト/android-external-openssl: openvpn のニーズに合わせて Android に同梱されている openssl の拡張機能。

GitHub - CyanogenMod/android_external_openssl: Android 用 OpenSSL

GitHub - robertying/openssl-curl-android: Android 用 openssl とcurl をコンパイルする

1つ。OpenSSL は、豊富な暗号化機能とセキュリティ プロトコルの実装を提供するオープン ソースの暗号化ライブラリです。OpenSSL のソース コードでは、crypto と ssl は 2 つの主要なモジュールで、それぞれ暗号化機能と SSL/TLS プロトコルの実装に使用されます。

暗号モジュール:

対称暗号化アルゴリズム (AES、DES など)、ハッシュ アルゴリズム (MD5、SHA など)、公開キー暗号化アルゴリズム (RSA、ECDSA など) など、豊富な暗号化機能を提供します。
SSL/TLS、S/MIME、PKCS などのさまざまな暗号化プロトコルが実装されています。
大規模な数値演算、乱数生成、証明書演算など、暗号化関連のデータ構造と関数を提供します。
暗号化、復号化、署名、検証、キー生成、およびその他の暗号アルゴリズムの操作をサポートします。
SSLモジュール:

SSL/TLS プロトコルは、送信中のデータの機密性、完全性、認証を保証する安全な通信チャネルを提供するために実装されています。
安全な接続を確立し、暗号化アルゴリズムとキーをネゴシエートするための SSL/TLS ハンドシェイク プロトコルを実装しました。
SSL/TLS レコード プロトコルを実装しました。これは、アプリケーション層データをレコードに分割し、プロトコル要件に従って暗号化して送信するために使用されます。
SSL コンテキスト、SSL 接続、ハンドシェイク フェーズ関数など、SSL/TLS 関連のデータ構造と関数を提供します。
SSL/TLS クライアントおよびサーバー プログラミング インターフェイスをサポートし、SSL/TLS 通信用のアプリケーションを容易にします。
crypto モジュールは暗号化関連の機能を提供しますが、ssl モジュールは crypto モジュール上に構築され、暗号化ライブラリを使用して SSL/TLS プロトコルを実装することに注意してください。OpenSSL の暗号モジュールと ssl モジュールを通じて、開発者はアプリケーションにさまざまな暗号化機能と安全な通信メカニズムを実装できます。

二。OpenSSL の暗号化モジュールは、さまざまな暗号化関連の操作を実行するための多くの主要なインターフェイスを提供します。主な暗号インターフェイスの一部を次に示します。

ハッシュ関数インターフェース:

EVP_MD_CTX_new() および EVP_MD_CTX_free(): ハッシュ関数コンテキストを作成および解放します。
EVP_DigestInit()、EVP_DigestUpdate()、および EVP_DigestFinal(): ハッシュ計算を初期化し、更新し、完了します。
EVP_MD_size(): ハッシュ ダイジェストの出力バイト長を取得します。
対称暗号化インターフェース:

EVP_CIPHER_CTX_new() および EVP_CIPHER_CTX_free(): 対称暗号化アルゴリズム コンテキストを作成および解放します。
EVP_CipherInit()、EVP_CipherUpdate()、および EVP_CipherFinal(): 対称暗号化アルゴリズムの暗号化または復号化操作を初期化、更新し、完了します。
EVP_CIPHER_key_length() および EVP_CIPHER_iv_length(): 対称暗号化アルゴリズムのキーの長さと初期化ベクトルの長さを取得します。
乱数生成インターフェース:

RAND_bytes(): 乱数バイトのシーケンスを生成します。
RAND_pseudo_bytes(): 擬似乱数のバイト シーケンスを生成します。
公開キー暗号化インターフェイス:

EVP_PKEY_new() および EVP_PKEY_free(): 公開キー (または秘密キー) オブジェクトを作成および解放します。
EVP_PKEY_encrypt() および EVP_PKEY_decrypt(): 公開キー (または秘密キー) を使用してデータを暗号化または復号化します。
デジタル署名インターフェイス:

EVP_SignInit()、EVP_SignUpdate()、および EVP_SignFinal(): デジタル署名操作を初期化し、更新し、完了します。
EVP_VerifyInit()、EVP_VerifyUpdate()、EVP_VerifyFinal(): デジタル署名検証操作を初期化し、更新し、完了します。
キーペアと証明書の操作:

RSA_generate_key(): RSA キー ペアを生成します。
EVP_PKEY_assign_RSA(): RSA キー ペアを EVP_PKEY オブジェクトに割り当てます。
EVP_PKEY_get1_RSA(): EVP_PKEY オブジェクトから RSA キー ペアを取得します。
PEM_write_X509(): 証明書を X.509 形式でファイルに書き込みます。
これらは、暗号化モジュールによって提供されるインターフェイスのほんの数例であり、実際には、さまざまな種類の暗号化操作を実行するために使用できる他の多くの関数やデータ構造があります。開発者は、OpenSSL の公式ドキュメントとヘッダー ファイルを通じて、より詳細なインターフェイス情報を学ぶことができます。

三つ。

SSL モジュールは、SSL/TLS プロトコルの実装に使用される OpenSSL の一部であり、SSL/TLS の安全な通信をサポートする一連のインターフェイスを提供します。一部の SSL モジュールによって提供される主なインターフェイスは次のとおりです。

  1. コンテキスト操作インターフェイス:

    • SSL_CTX_new() および SSL_CTX_free(): SSL コンテキスト オブジェクトを作成して解放します。
    • SSL_CTX_set_options() および SSL_CTX_clear_options(): SSL コンテキストを設定およびクリアするためのオプション。
    • SSL_CTX_use_certificate_file() および SSL_CTX_use_PrivateKey_file(): SSL コンテキストの証明書と秘密キーを設定します。
    • SSL_CTX_load_verify_locations(): SSL コンテキストの CA 証明書の場所を設定します。
  2. 接続操作インターフェース:

    • SSL_new() および SSL_free(): SSL 接続オブジェクトを作成して解放します。
    • SSL_set_fd() および SSL_get_fd(): SSL 接続のソケット ファイル記述子を関連付けて取得します。
    • SSL_connect() および SSL_accept(): クライアント側とサーバー側で SSL 接続を確立します。
    • SSL_read() および SSL_write(): SSL 暗号化チャネルでのデータの読み取りおよび書き込み。
    • SSL_shutdown(): SSL 接続を正常に閉じます。
  3. ハンドシェイク操作インターフェイス:

    • SSL_set_connect_state() および SSL_set_accept_state(): SSL 接続のハンドシェイク ステータスを設定します。
    • SSL_do_handshake():SSL接続のハンドシェイク処理を実行します。
  4. 暗号化と検証インターフェイス:

    • SSL_get_cipher() および SSL_get_cipher_list(): SSL 接続で使用される暗号化アルゴリズムと暗号スイートのリストを取得します。
    • SSL_get_peer_certificate() および SSL_get_peer_cert_chain(): ピアの証明書と証明書チェーンを取得します。
    • SSL_get_verify_result(): ピア証明書の検証結果を取得します。

これらは、SSL モジュールによって提供されるインターフェイスのほんの数例であり、SSL/TLS 接続の構成と操作に使用できる他にも多くの関数やデータ構造があります。開発者は、OpenSSL の公式ドキュメントとヘッダー ファイルを通じて、より詳細なインターフェイス情報を学ぶことができます。

おすすめ

転載: blog.csdn.net/blogercn/article/details/132310105