OpenSSL

密碼學和 SSL/TLS 工具包

提供者

名稱

提供者 - OpenSSL 作業實作提供者

語法

#include <openssl/provider.h>

說明

一般

此頁面包含對提供者作者有用的資訊。

在 OpenSSL 條款中,提供者是提供一個或多個實作,用於各種演算法的不同作業的程式碼單元,而這些演算法可能是您想要執行的演算法。

作業是您想要執行的事項,例如加密和解密、金鑰衍生、MAC 計算、簽署和驗證等。

演算法是執行作業的命名方法。演算法通常圍繞著密碼學作業進行,但也可能圍繞著其他類型的作業進行,例如管理特定類型的物件。

請參閱 crypto(7) 以取得進一步的詳細資料。

提供者

提供者提供初始化函式,作為 OSSL_DISPATCH(3) 陣列形式的基本函式組,並進一步提供一組 OSSL_ALGORITHM(3)(請參閱 openssl-core.h(7))。它可能是動態載入的模組,或可能是內建的,在 OpenSSL 函式庫或應用程式中。如果是動態載入的模組,則初始化函式必須命名為 OSSL_provider_init 並且必須匯出。如果是內建的,則初始化函式可以有任何名稱。

初始化函式必須具有下列簽章

int NAME(const OSSL_CORE_HANDLE *handle,
         const OSSL_DISPATCH *in, const OSSL_DISPATCH **out,
         void **provctx);

handle 是提供者的 OpenSSL 函式庫物件,並作為 OpenSSL 函式庫需要了解的提供者所有資訊的控制代碼。對於提供者本身,它會傳遞給 in 中提供的派遣陣列中的一些函式。

in 是由 OpenSSL 函式庫提供的基本函式派遣陣列,而可用的函式會進一步在 provider-base(7) 中說明。

*out 必須指定提供者提供給 OpenSSL 函式庫的基本函式派遣陣列。可在 provider-base(7) 中進一步說明可提供的函式,而它們是 OpenSSL 函式庫和提供者之間的中央通訊方式。

*provctx 應指定提供者特定內容,以允許提供者同時使用多次。此指標會傳遞給提供者提供的各種作業函式。

請注意,在初始化函式完成並成功傳回之前,提供者不會提供給應用程式使用。

提供者提供給 OpenSSL 函式庫的其中一個函式是 OpenSSL 函式庫取得各種演算法作業實作的中央機制。它會以數字 OSSL_FUNC_PROVIDER_QUERY_OPERATION 進行參照,並具有下列簽章

const OSSL_ALGORITHM *provider_query_operation(void *provctx,
                                               int operation_id,
                                               const int *no_store);

provctx 是由初始化函式傳回的提供者特定內容。

operation_id 是作業識別碼(請參閱下列「作業」)。

no_store 是回傳給 OpenSSL 函式庫的旗標,當其非零時,表示 OpenSSL 函式庫不會在其內部儲存實作的儲存中儲存對回傳資料的參考。

回傳的 OSSL_ALGORITHM(3) 是任何 OpenSSL 函式庫 API 的基礎,其使用提供者作為實作,最常見於擷取類型的函式(請參閱 crypto(7) 中的「演算法擷取」)。

操作

操作以數字表示,透過巨集,名稱以 OSSL_OP_ 開頭。

每個操作都附帶一組已定義的函式類型,提供者可以或不能提供,視其需要而定。

目前可用的操作為

摘要

在 OpenSSL 函式庫中,對應的方法物件為 EVP_MD。此操作的數字為 OSSL_OP_DIGEST。提供者可以提供的函式說明於 provider-digest(7) 中。

對稱式密碼

在 OpenSSL 函式庫中,對應的方法物件為 EVP_CIPHER。此操作的數字為 OSSL_OP_CIPHER。提供者可以提供的函式說明於 provider-cipher(7) 中。

訊息驗證碼 (MAC)

在 OpenSSL 函式庫中,對應的方法物件為 EVP_MAC。此操作的數字為 OSSL_OP_MAC。提供者可以提供的函式說明於 provider-mac(7) 中。

金鑰衍生函式 (KDF)

在 OpenSSL 函式庫中,對應的方法物件為 EVP_KDF。此操作的數字為 OSSL_OP_KDF。提供者可以提供的函式說明於 provider-kdf(7) 中。

金鑰交換

在 OpenSSL 函式庫中,對應的方法物件為 EVP_KEYEXCH。此操作的數字為 OSSL_OP_KEYEXCH。提供者可以提供的函式說明於 provider-keyexch(7) 中。

非對稱式密碼

在 OpenSSL 函式庫中,對應的方法物件為 EVP_ASYM_CIPHER。此操作的數字為 OSSL_OP_ASYM_CIPHER。提供者可以提供的函式說明於 provider-asym_cipher(7) 中。

非對稱式金鑰封裝

在 OpenSSL 函式庫中,對應的方法物件為 EVP_KEM。此操作的數字為 OSSL_OP_KEM。提供者可以提供的函式說明於 provider-kem(7) 中。

編碼

在 OpenSSL 函式庫中,對應的方法物件為 OSSL_ENCODER。此操作的數字為 OSSL_OP_ENCODER。提供者可以提供的函式說明於 provider-encoder(7) 中。

解碼

在 OpenSSL 函式庫中,對應的方法物件為 OSSL_DECODER。此操作的數字為 OSSL_OP_DECODER。提供者可以提供的函式說明於 provider-decoder(7) 中。

亂數產生

此操作的數字為 OSSL_OP_RAND。提供者可以提供的亂數產生函式說明於 provider-rand(7) 中。

金鑰管理

此操作的數字為 OSSL_OP_KEYMGMT。提供者可以提供的金鑰管理函式說明於 provider-keymgmt(7) 中。

簽署和簽章驗證

此操作的編號為 OSSL_OP_SIGNATURE。供應商可提供的數位簽章功能說明於 provider-signature(7)

儲存管理

此操作的編號為 OSSL_OP_STORE。供應商可提供的儲存管理功能說明於 provider-storemgmt(7)

演算法命名

演算法名稱不區分大小寫。任何特定演算法都可以有多個別名與其關聯。OpenSSL 正規命名方式遵循下列格式

ALGNAME[VERSION?][-SUBNAME[VERSION?]?][-SIZE?][-MODE?]

VERSION 僅在演算法有多個版本時出現(例如 MD2、MD4、MD5)。如果只有一個版本,則可以省略。

SUBNAME 可以在將多個演算法組合在一起時出現,例如 MD5-SHA1。

SIZE 僅在演算法有多個不同大小的版本時出現(例如 AES-128-CBC、AES-256-CBC)

MODE 僅在適用的情況下出現。

其他別名可能存在,例如標準組織或慣例使用替代名稱或 OpenSSL 歷史上使用的名稱。

OPENSSL 供應商

OpenSSL 提供多個自己的供應商。這些供應商為預設、基本、fips、舊版和 null 供應商。請參閱 crypto(7) 以取得這些供應商的概觀。

另請參閱

EVP_DigestInit_ex(3)EVP_EncryptInit_ex(3)OSSL_LIB_CTX(3)EVP_set_default_properties(3)EVP_MD_fetch(3)EVP_CIPHER_fetch(3)EVP_KEYMGMT_fetch(3)openssl-core.h(7)provider-base(7)provider-digest(7)provider-cipher(7)provider-keyexch(7)

歷史記錄

供應商的概念及其周邊的一切在 OpenSSL 3.0 中引入。

版權所有 2019-2022 OpenSSL 專案作者。保留所有權利。

根據 Apache 許可證 2.0(「許可證」)授權。您不得使用此檔案,除非符合許可證。您可以在原始程式碼中的 LICENSE 檔案或 https://www.openssl.org/source/license.html 取得一份副本。