为什么id_rsa和id_rsa.pub文件的内容是字母?

问题描述 投票:0回答:1

我正在尝试实现RSA算法,并且根据该算法,公钥和私钥均基于非常大的数字,因此,private密钥和public key也是数字。

例如生成私钥和公钥

让我们选择

p = 7
q = 19

n = p * q = 133
m = (p-1) * (q-1) = 108

e = 5 
d = (1 + i * m) /e
   for i = 0, 1, 2 .. n 
d = 65

这里公钥对(n,e)=(133, 5)私钥对(n,d)= (133,65)

加密:p^e%n解密:c^d%n

但是。据我所知,由public key命令生成的private keyssh-keygenid_rsaid_rsa.pub

[检查id_rsaid_rsa.pub时,我发现字母而不是很大的数字。

这些id_rsaid_rsa.pub如何用于加密数据。

encryption cryptography rsa ssh-keys ssh-keygen
1个回答
0
投票
what是用base64编码的,那就是杂草丛生的地方。文件的主要目的是存储一些在RSA计算中使用的数字。它们不适合人类阅读,因为它对空间不友好。它们是供机器处理的,且速度快,因此必须以机器可以轻松加载和开始使用的格式编写。

如果您查看名为JWKJSON Web密钥]的标准,您将看到密钥如何在应用程序之间传递。例如:私钥

{ "kty": "EC", "d": "u5uui9SeGmkorTrbXtOGWAaov1cLCZXt3kleSxzH8T0", "use": "sig", "crv": "P-256", "x": "a3JvmNVFxue8gyAdtH_Pca87CKjh82j7mMRzHhS3_IA", "y": "JdEC03zi2IatFVjrp1o4ear32gBe4E0xiFf_EDt8unM", "alg": "ES256" }

和公共密钥:
{
    "kty": "EC",
    "use": "sig",
    "crv": "P-256",
    "x": "a3JvmNVFxue8gyAdtH_Pca87CKjh82j7mMRzHhS3_IA",
    "y": "JdEC03zi2IatFVjrp1o4ear32gBe4E0xiFf_EDt8unM",
    "alg": "ES256"
}

这些可能是更易于理解的形式,但是如果您观察到,它们是序列化的字符串格式。它们必须从字符串到JSON再到字段提取,然后将它们转换为可以使用的对象。

由openssl和openssh生成的文件的格式更接近于类似计算机的格式。我建议使用openssl和openssh一起玩,因为它们的传播范围更大。有一个规范[[x509,全世界的加密技术都使用它来共享密钥。 Openssh建立在一些不同的规范上,它们生成的密钥以不同的格式编写。

如果您想查看大数字,有两种方法:

但是首先,让我们生成一个密钥来玩耍。我们将生成一个512位密钥,只是为了使其更小。

openssl genrsa -out key.pem 512

简便的方法,请一个工具提供帮助:鉴于您已经有了上述文件,您可以要求openssl进行解析以为您转储信息。

$ openssl rsa -in key.pem -noout -text
RSA Private-Key: (512 bit, 2 primes)
modulus:
    00:a9:...
publicExponent: 65537 (0x10001)
privateExponent:
    00:8c:...
prime1:
    00:da:...
prime2:
    00:c6:...
exponent1:
    4e:0d:...
exponent2:
    76:66:...
coefficient:
    00:92:...
    数字被省略号只是为了保持较小。另一种查看方式是:
  • $ openssl asn1parse -in key.pem -inform PEM
    您将看到期望的巨大输出结果。

    困难的方式:这些数字以称为

    ASN1

    的格式打包。如果您以编码格式读取二进制文件,则也可以在二进制文件中看到数字。
    1. 但是首先,需要将openssh键转换为所需的格式,称为PEM格式。
  • ssh-keygen -f id_rsa.pub -e -m pem > pubkey.pem 现在,我们可以执行openssl asn1parse -in pubkey.pem -inform PEM并查看详细信息。

    $ ssh-keygen -f id_rsa.pub -e -m pem | openssl asn1parse -inform PEM 0:d=0 hl=4 l= 266 cons: SEQUENCE 4:d=1 hl=4 l= 257 prim: INTEGER :EB3F998DBAE8F8AFF59FE51F2A1BCE36D76F71D0DD76FD92B77CB2FFADAF9B7F3EA77FEA40590D7C1BFEEB7DA7F72E780D79784A778761980DA7FE4C320BA513A4849929F92A2185305C379A125080C7CAFA37C53D38AD447A895EC5E3BEC77F323CB818D90F5F8071566A7618ADEA94A4FF472E21BDF782197A07DADB6DEFD6FE27D759775BEC3AFEAF973F861FD5F3A8CB1177304206A79DAFC961F7E4792E76732589BD219742F73630364C3724D5FCE3B0DC1EDD3E498549EE74ED17157E333883FAC498C8EE75F69700E2385A510BF705DE4DD5599806F47F2DDD6EA71CD0ADF50C9B943A30E2A8B6C086699A59413195CC4CA846B40460F767F4D40AE3 265:d=1 hl=2 l= 3 prim: INTEGER :010001

    请阅读此答案,以了解如何将这些数字编码为PEM格式:https://stackoverflow.com/a/59235177/6266958
  • © www.soinside.com 2019 - 2024. All rights reserved.