pkcs#11和Cryptoki的介绍
快速链接:
.
👉👉👉 个人博客笔记导读目录(全部) 👈👈👈
概念
PKCS#11标准定义了与密码令牌(如硬件安全模块(HSM)和智能卡)的独立于平台的API,并将API本身命名为“Cryptoki”(来自“加密令牌接口”,发音为“crypto-key” - 但是“PKCS#11”通常用于指代API以及定义它的标准)。 API定义了最常用的加密对像类型(RSA密钥,X.509证书,DES / 三重DES密钥等)以及使用,创建/生成,修改和删除这些对象所需的所有功能。
在密码系统中,PKCS#11是公钥加密标准(PKCS, Public-Key Cryptography Standards)中的一份子 ,由RSA实验室(RSA Laboratories)发布[1],它为加密令牌定义了一组平台无关的API ,如硬件安全模块和智能卡。
由于没有一个真正的标准加密令牌,这个API已经发展成为一个通用的加密令牌的抽象层。 PKCS#11 API定义最常用的加密对象类型( RSA密钥,X.509证书,DES /三重DES密钥等)和所有需要使用的功能,创建/生成,修改和删除这些对象。注意:pkcs#11只提供了接口的定义, 不包括接口的实现,一般接口的实现是由设备提供商提供的,如usbkey的生产厂商会提供 符合PKCS#11接口标准的API的实现。这样你只要通过接口调用API函数即可实现其功能
简而言之, PKCS#11 是一个标准,规定了Cryptoki API .
Cryptoki API
Cryptoki API有哪些API ? 可以去查阅pkcs11-base-v3.0-os.pdf文档的第5小节
Cryptoki API 分为以下几类
- general-purpose functions (4 functions)
- slot and token management functions (9 functions)
- session management functions (8 functions)
- object management functions (9 functions)
- encryption functions (4 functions)
- message-based encryption functions (5 functions)
- decryption functions (4 functions)
- message digesting functions (5 functions)
- signing and MACing functions (6 functions)
- functions for verifying signatures and MACs (6 functions)
- dual-purpose cryptographic functions (4 functions)
- key management functions (5 functions)
- random number generation functions (2 functions)
- parallel function management functions (2 functions)
optee中的pkcs#11集成(HSM in optee)
设计框图非常简单,其实就是一个CA(lib库的形式存在)和一个TA
如下列出了CA(lib库中所支持的CryptokiAPI
(optee_client/libckteec/src/pkcs11_api.c)static const CK_FUNCTION_LIST libckteec_function_list = {.version = {.major = CK_PKCS11_VERSION_MAJOR,.minor = CK_PKCS11_VERSION_MINOR,},.C_Initialize = C_Initialize,.C_Finalize = C_Finalize,.C_GetInfo = C_GetInfo,.C_GetFunctionList = C_GetFunctionList,.C_GetSlotList = C_GetSlotList,.C_GetSlotInfo = C_GetSlotInfo,.C_GetTokenInfo = C_GetTokenInfo,.C_GetMechanismList = C_GetMechanismList,.C_GetMechanismInfo = C_GetMechanismInfo,.C_InitToken = C_InitToken,.C_InitPIN = C_InitPIN,.C_SetPIN = C_SetPIN,.C_OpenSession = C_OpenSession,.C_CloseSession = C_CloseSession,.C_CloseAllSessions = C_CloseAllSessions,.C_GetSessionInfo = C_GetSessionInfo,.C_GetOperationState = C_GetOperationState,.C_SetOperationState = C_SetOperationState,.C_Login = C_Login,.C_Logout = C_Logout,.C_CreateObject = C_CreateObject,.C_CopyObject = C_CopyObject,.C_DestroyObject = C_DestroyObject,.C_GetObjectSize = C_GetObjectSize,.C_GetAttributeValue = C_GetAttributeValue,.C_SetAttributeValue = C_SetAttributeValue,.C_FindObjectsInit = C_FindObjectsInit,.C_FindObjects = C_FindObjects,.C_FindObjectsFinal = C_FindObjectsFinal,.C_EncryptInit = C_EncryptInit,.C_Encrypt = C_Encrypt,.C_EncryptUpdate = C_EncryptUpdate,.C_EncryptFinal = C_EncryptFinal,.C_DecryptInit = C_DecryptInit,.C_Decrypt = C_Decrypt,.C_DecryptUpdate = C_DecryptUpdate,.C_DecryptFinal = C_DecryptFinal,.C_DigestInit = C_DigestInit,.C_Digest = C_Digest,.C_DigestUpdate = C_DigestUpdate,.C_DigestKey = C_DigestKey,.C_DigestFinal = C_DigestFinal,.C_SignInit = C_SignInit,.C_Sign = C_Sign,.C_SignUpdate = C_SignUpdate,.C_SignFinal = C_SignFinal,.C_SignRecoverInit = C_SignRecoverInit,.C_SignRecover = C_SignRecover,.C_VerifyInit = C_VerifyInit,.C_Verify = C_Verify,.C_VerifyUpdate = C_VerifyUpdate,.C_VerifyFinal = C_VerifyFinal,.C_VerifyRecoverInit = C_VerifyRecoverInit,.C_VerifyRecover = C_VerifyRecover,.C_DigestEncryptUpdate = C_DigestEncryptUpdate,.C_DecryptDigestUpdate = C_DecryptDigestUpdate,.C_SignEncryptUpdate = C_SignEncryptUpdate,.C_DecryptVerifyUpdate = C_DecryptVerifyUpdate,.C_GenerateKey = C_GenerateKey,.C_GenerateKeyPair = C_GenerateKeyPair,.C_WrapKey = C_WrapKey,.C_UnwrapKey = C_UnwrapKey,.C_DeriveKey = C_DeriveKey,.C_SeedRandom = C_SeedRandom,.C_GenerateRandom = C_GenerateRandom,.C_GetFunctionStatus = C_GetFunctionStatus,.C_CancelFunction = C_CancelFunction,.C_WaitForSlotEvent = C_WaitForSlotEvent, };参考
PKCS #11 Cryptographic Token Interface Base Specification Version 2.40
Python PKCS#11 - High Level Wrapper API
Oracle Solaris 加密框架 : Overview of the Cryptoki Library
总结
以上是生活随笔为你收集整理的pkcs#11和Cryptoki的介绍的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: [architecture]-armv8
- 下一篇: ATF(TF-A)的编译方法