实验一-密码引擎-3-加密API研究

任务详情

密码引擎API的主要标准和规范包括:
1 微软的Crypto API
2 RAS公司的PKCS#11标准
3 中国商用密码标准:GMT 0016-2012 智能密码钥匙密码应用接口规范,GMT 0018-2012密码设备应用接口规范等

研究以上API接口,总结他们的异同,并以龙脉GM3000Key为例,写出调用不同接口的代码,提交博客链接和代码链接。
内容:
0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)(5分)
1 总结这些API在编程中的使用方式(5分)
2 列出这些API包含的函数,进行分类,并总结它们的异同(10分)
3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接(10分)

0 查找各种标准的原始文档,研究学习(至少包含Crypto API,PKCS#11,GMT 0016-2012,GMT 0018-2012)

0.1 微软的Crypto API

0.2 RAS公司的PKCS#11标准

0.3 中国商用密码标准

0.3.1 GMT 0016-2012 智能密码钥匙密码应用接口规范

0.3.2 GMT 0018-2012密码设备应用接口规范

1 总结这些API在编程中的使用方式

1.1 Crypto API

功能
Crypto API 是一组用于执行加密和解密操作的接口。它提供了各种加密算法的实现,包括对称加密、非对称加密和哈希函数。

使用方式

  1. 密钥生成:使用 Crypto.generateKey() 函数生成加密所需的密钥。
  2. 加密和解密:使用 Crypto.encrypt()Crypto.decrypt() 函数对数据进行加密和解密操作。
  3. 签名和验证:使用 Crypto.sign()Crypto.verify() 函数对数据进行签名和验证。
  4. 哈希函数:使用 Crypto.hash() 函数计算数据的哈希值。

示例代码

const key = Crypto.generateKey('AES', 256);
const encryptedData = Crypto.encrypt(data, key);
const decryptedData = Crypto.decrypt(encryptedData, key);
const signature = Crypto.sign(data, privateKey);
const isValid = Crypto.verify(data, signature, publicKey);
const hash = Crypto.hash(data);

1.2 PKCS#11

功能
PKCS#11 是一组用于访问加密设备(如智能卡或硬件安全模块)的标准接口。它提供了访问加密设备中存储的密钥和执行加密操作的功能。

使用方式

  1. 初始化 PKCS#11 模块:使用 PKCS11.initialize() 函数初始化 PKCS#11 模块。
  2. 获取对象句柄:使用 PKCS11.getObjectHandle() 函数获取存储在加密设备中的对象的句柄。
  3. 加密和解密:使用 PKCS11.encrypt()PKCS11.decrypt() 函数执行加密和解密操作。
  4. 签名和验证:使用 PKCS11.sign()PKCS11.verify() 函数执行签名和验证操作。

示例代码

PKCS11.initialize(libraryPath);
const objectHandle = PKCS11.getObjectHandle(objectName);
const encryptedData = PKCS11.encrypt(data, objectHandle);
const decryptedData = PKCS11.decrypt(encryptedData, objectHandle);
const signature = PKCS11.sign(data, privateKeyHandle);
const isValid = PKCS11.verify(data, signature, publicKeyHandle);

1.3 GMT 0016-2012

功能
GMT 0016-2012 是一组规范,定义了密码学算法的安全性要求和测试方法。它用于评估密码学算法的安全性和可靠性。

使用方式

  1. 了解规范要求:仔细阅读 GMT 0016-2012 规范,了解其中对密码学算法的安全性和可靠性的要求。
  2. 实施测试:根据规范中定义的测试方法,对所使用的密码学算法进行测试,以确保其符合规范要求。

示例代码:无。

1.4 GMT 0018-2012

功能
GMT 0018-2012 是一组规范,定义了密码管理系统的安全性要求和测试方法。它用于评估密码管理系统的安全性和可靠性。

使用方式

  1. 了解规范要求:仔细阅读 GMT 0018-2012 规范,了解其中对密码管理系统的安全性和可靠性的要求。
  2. 实施测试:根据规范中定义的测试方法,对所使用的密码管理系统进行测试,以确保其符合规范要求。

示例代码:无。

对于您提到的四个API(Crypto API、PKCS#11、GMT 0016-2012和GMT 0018-2012),我会尽可能详细地列出它们包含的函数,并对它们进行分类和总结它们的异同。

2 列出这些API包含的函数,进行分类,并总结它们的异同

Crypto API:

分类:

  1. 对称加密算法
  2. 非对称加密算法
  3. 摘要算法
  4. 密钥管理
  5. 随机数生成
  6. 数字签名
  7. 加密/解密辅助功能

函数列表:

  1. 对称加密算法:

    • AES_encrypt()
    • AES_decrypt()
    • DES_encrypt()
    • DES_decrypt()
  2. 非对称加密算法:

    • RSA_encrypt()
    • RSA_decrypt()
    • ECC_encrypt()
    • ECC_decrypt()
  3. 摘要算法:

    • SHA256()
    • SHA512()
    • MD5()
  4. 密钥管理:

    • generate_key()
    • import_key()
    • export_key()
    • delete_key()
  5. 随机数生成:

    • generate_random()
  6. 数字签名:

    • sign_message()
    • verify_signature()
  7. 加密/解密辅助功能:

    • padding()
    • mode_of_operation()

异同:

  • Crypto API提供了一系列对称和非对称加密算法的支持,而且还包括摘要算法、密钥管理、数字签名等功能。
  • 这些函数都是用于加密、解密、签名和验证等操作。
  • Crypto API通常被用于数据安全和加密通信领域。

PKCS#11:

分类:

  1. 初始化和终结化
  2. 模块管理
  3. 会话管理
  4. 对象管理
  5. 密钥管理
  6. 加密/解密操作
  7. 签名/验证操作

函数列表:

  1. 初始化和终结化:

    • C_Initialize()
    • C_Finalize()
  2. 模块管理:

    • C_GetInfo()
    • C_GetSlotList()
  3. 会话管理:

    • C_OpenSession()
    • C_CloseSession()
  4. 对象管理:

    • C_CreateObject()
    • C_DestroyObject()
  5. 密钥管理:

    • C_GenerateKey()
    • C_DestroyKey()
  6. 加密/解密操作:

    • C_Encrypt()
    • C_Decrypt()
  7. 签名/验证操作:

    • C_Sign()
    • C_Verify()

异同:

  • PKCS#11提供了一种标准的加密设备接口,用于安全令牌和智能卡等硬件安全模块。
  • 它主要用于对加密设备进行管理,包括初始化、终结化、模块管理、会话管理、对象管理、密钥管理以及加密和解密操作等。
  • PKCS#11通常用于与硬件加密设备进行交互,例如智能卡和USB加密令牌。

GMT 0016-2012:

分类:

  1. 算法标识
  2. 加密/解密操作
  3. 密钥管理
  4. 杂凑算法
  5. 数字签名
  6. 消息认证码

函数列表:

  1. 算法标识:

    • GetAlgorithmInfo()
  2. 加密/解密操作:

    • EncryptData()
    • DecryptData()
  3. 密钥管理:

    • GenerateKey()
    • ImportKey()
  4. 杂凑算法:

    • HashData()
  5. 数字签名:

    • SignData()
    • VerifySignature()
  6. 消息认证码:

    • GenerateMAC()
    • VerifyMAC()

异同:

  • GMT 0016-2012定义了一系列密码学算法和相关操作,包括加密、解密、密钥管理、杂凑算法、数字签名和消息认证码等。
  • 该标准通常用于指导密码学实现,并确保其安全性和互操作性。

GMT 0018-2012:

分类:

  1. 密钥管理
  2. 数字签名
  3. 杂凑算法
  4. 随机数生成
  5. 签名和认证
  6. 加密/解密操作

函数列表:

  1. 密钥管理:

    • GenerateKeyPair()
    • ImportKey()
    • ExportKey()
  2. 数字签名:

    • SignData()
    • VerifySignature()
  3. 杂凑算法:

    • HashData()
  4. 随机数生成:

    • GenerateRandom()
  5. 签名和认证:

    • SignMessage()
    • VerifyMessage()
  6. 加密/解密操作:

    • EncryptData()
    • DecryptData()

异同:

  • GMT 0018-2012也是一个密码学相关的标准,定义了密钥管理、数字签名、杂凑算法、随机数生成、签名和认证、加密和解密操作等功能。
  • 与其他标准相比,GMT 0018-2012可能具有不同的算法支持和函数命名约定。

异同总结:

相同点:

  1. 所有这些API都提供了密码学相关的功能,如加密、解密、签名和认证等。
  2. 它们都包含密钥管理的功能,允许生成、导入、导出和删除密钥。
  3. 这些API都是为了保障数据的安全性和完整性而设计的。

不同点:

  1. 每个API可能支持的算法和操作略有不同,取决于其设计目标和应用领域。
  2. 它们的命名和接口设计可能有所不同,因为它们是由不同的标准组织或组织制定的。
  3. 每个API可能针对不同的硬件或软件环境而设计,因此在实际应用中可能具有不同的优势和限制。

3 以龙脉GM3000Key为例,写出调用不同接口的代码(Crypto API,PKCS#11,SKF接口),把运行截图加入博客,并提供代码链接

Ubuntu调用

skf

deviceAuth

image

encryptTest

image

signatureTest

image

Windows调用实例

csp

EncrypDecryptFile

加密
image
image
image

解密
image

image

EnumCerts

image

Sign_Verify

image

pkcs11

PKCSDemo

这里由于版本不兼容,需要删去部分NEWLINE,并安装MCF库
编译项目时出现-----MSB8041 此项目需要 MFC 库

RSA Sign and Verify
image

RSA Encrypt and Decrypt
image

PKCSTest

DES
image

DES3
image

RC2
image

RC4
image

RSA
image

AES
image

skf

deviceAuth
image

EncryptData
image

Remoteunblock
image

代码地址

posted @ 2024-04-10 12:31  20211108俞振阳  阅读(22)  评论(0编辑  收藏  举报