没有合适的资源?快使用搜索试试~ 我知道了~
首页国密算法--Openssl 实现国密算法(加密和解密)
国密算法--Openssl 实现国密算法(加密和解密)
需积分: 44 3.0k 浏览量
更新于2023-03-16
评论 4
收藏 314KB DOC 举报
国密算法--Openssl 实现国密算法(加密和解密),内涵对称算法,非对称算法加解密流程,图文直观,并附有C语言代码
资源详情
资源评论
资源推荐

上一次讲了产生密钥,这次我们讲一下加密解密的实现。
先说一下加密解密的流程,一下这些内容都是从国密局发布的国密标准
文档里面摘录出来的。大家可以去国密局的网站上自己下载。
下列符号适用于本部分。
A,B:使用公钥密码系统的两个用户。
a,b: Fq 中的元素,它们定义 Fq 上的一条椭圆曲线 E。
dB:用户 B 的私钥。
E(Fq): Fq 上椭圆曲线 E 的所有有理点(包括无穷远点 O)组
成的集合。
Fq
:包含 q 个元素的有限域。
G:椭圆曲线的一个基点,其阶为素数。
2Hash( ):密码杂凑函数。
Hv
( ):消息摘要长度为 v 比特的密码杂凑函数。
KDF( ):密钥派生函数。
M :待加密的消息。
M ′:解密得到的消息。
n:基点 G 的阶(n 是# E(Fq)的素因子)。
O:椭圆曲线上的一个特殊点,称为无穷远点或零点,是椭
圆曲线加法群的单位元。
PB:用户 B 的公钥。

q:有限域 Fq 中元素的数目。
x∥y: x 与 y 的拼接,其中 x、 y 可以是比特串或字节串。
[k]P:椭圆曲线上点 P 的 k 倍点,即, [k]P= P + P + · · ·
+ P(k 个, k 是正整数)。
[x,y]:大于或等于 x 且小于或等于 y 的整数的集合。
⌈x⌉:顶函数,大于或等于 x 的最小整数。例如⌈7⌉=7,
⌈8.3⌉=9。
⌊x⌋:底函数,小于或等于 x 的最大整数。例如⌊7⌋=7,
⌊8.3⌋=8。
#E(Fq): E(Fq)上点的数目,称为椭圆曲线 E(Fq)的阶
下面给出加密过程:
设需要发送的消息为比特串 M, klen 为 M 的比特长度。
为了对明文 M 进行加密,作为加密者的用户 A 应实现以下运
算步骤:
A1:用随机数发生器产生随机数 k∈[1,n-1];
A2:计算椭圆曲线点 C1=[k]G=(x1,y1),按本文本第 1 部
分 4.2.8 和 4.2.4 给出的细节,将 C1 的数据类
型转换为比特串;
A3:计算椭圆曲线点 S=[h]PB,若 S 是无穷远点,则报错
并退出;
A4:计算椭圆曲线点[k]PB=(x2,y2),按本文本第 1 部分

4.2.5 和 4.2.4 给出的细节,将坐标 x2、 y2 的
数据类型转换为比特串;
A5:计算 t=KDF(x2 ∥ y2, klen),若 t 为全 0 比特串,则
返回 A1;
A6:计算 C2 = M ⊕ t;
A7:计算 C3 = Hash(x2 ∥ M ∥ y2);
A8:输出密文 C = C1 ∥ C2 ∥ C3。
剩余13页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0