RSA算法示例

not*_*ted 0 security encryption cryptography rsa public-key-encryption

在这个简单的示例中,假设一个权限使用公共RSA密钥(e = 11,n = 85)来签署文档.你希望他们签署你的消息(这是号码42),但你不希望他们知道他们签署了什么,所以你使用11的盲目因子"r".在你的计算中你可能希望使用以下结果:

11 ? 35 = 1 mod 64
11 ? 31 = 1 mod 85
Run Code Online (Sandbox Code Playgroud)

显示简短的工作.

1)您应该授权签署什么号码?

2)当局会给你多少号码?

3)从该号码中提取42的签名.

4)使用私钥验证此答案.

我已经看过了,如果有人能和我一起指导这个例子,我将非常感激.

Iri*_*ium 6

消息m为42,盲目因子r为11,因此提供给权限的值m'计算如下:

m' = m * re mod N
m' = 42 * 1111 mod 85
m' = 62

权威机构将s'使用以下方式计算:

s' = m'd mod N

d私人指数在哪里.

因此,我们必须计算我们知道的满足关系的值的私有指数:

e * d = 1 mod ?(N)

?欧拉的功能在哪里?N是两个素数的乘积pq每RSA算法的定义,并且因为N较小,我们可以很容易地因素,以确定p = 5q = 17.

因此,定义如下?:

?(N) = (p-1)(q-1)
?(N) = (5-1)(17-1) = 64

使用提供的结果,我们可以确定:

e * d = 1 mod ?(N)
11 * d = 1 mod 64
d = 35

所以,当局应该向我们返回盲目签名,s'计算如下:

s' = m'd mod N
s' = 6235 mod 85
s' = 73

要计算签名,我们需要s使用以下方法计算:

s = s' * r-1 mod N

在这里,是这样的反转:r-1r

r * r-1 = 1 mod N

再次使用给定的结果我们可以确定为:r-1

r * r-1 = 1 mod N
11 * r-1 = 1 mod 85
r-1 = 31

所以计算s成为:

s = s' * r-1 mod N
s = 73 * 31 mod 85
s = 53

您的问题是使用私钥验证这一点,但是使用公钥验证签名,这就是我将在此处执行的操作:

为了确认这是正确的签名,我们验证:

m = se mod N
m = 5311 mod 85
m = 42

因此,我们已经证明签名是有效的,因为m = 42- 我们的原始信息.

  • 一个具有足够数字的计算器可以直接进行,但你也可以通过普通的计算器或笔和纸轻松地打破计算,并在数字开始变得过大时应用模数.例如:42*11 ^ 11 = 42*11*(11 ^ 5)^ 2 = 42*11*161051 ^ 2 = 42*11*61 ^ 2 = 42*11*3721 = 42*11*66 = 30492 = 62 (2认同)