了解硬件提取的密钥

逆向工程 密码学
2021-06-22 23:40:00

我是加密新手,但一直致力于使用 128 位 RSA 加密卡数据的卡访问系统。

我有一个 1024 位加密数据的示例(来自卡片)。我也有公钥(1024 位),它(相当奇怪地)放置在访问控制硬件中。我 100% 确定它是公钥(不是私钥)。

首次尝试使用带有二进制密钥的 OpenSSL 密钥失败:

➤ openssl rsautl -decrypt -in ptt.enc.key -inkey ptt.pub.key -out ptt.dec.hex
无法加载私钥
➤ 11636:error:0906D06C:PEM 例程:PEM_read_bio:no start line:pem_lib.c:648:Expecting: ANY PRIVATE KEY

我知道我可能需要格式化/准备密钥,但我不确定如何。

有任何想法吗?

编辑 它的价值:公钥是:

15 77 D0 29 87 C6 3A 95 B5 1A E1 49 43 08 34 AE AF 3F 2E 0F 4C F8 C6 88 7A C6 C8 D7 32 D7 94 82 60 4F C1 8D 6 C 4A E 8D 6 A 4 D 2E 2E E0 4D 16 63 85 6D 76 0E AB EC CF B7 83 BA E1 D4 3E 1E 02 C5 01 1E 82 3B 24 F2 91 8F 98 A4 96 2A 87 5D 0D A 8 A 9 F9 1 9 D 8 F9 3 E 8 F9 6F 99 65 97 ED AD 7F 03 CA B9 15 ED 4B 58 B7 BA AD 28 C0 B6 75 93 CD FC CB 53 99 AB

加密卡值为:

8F 04 8D E0 83 7F 29 C8 03 54 D1 B5 E3 03 27 4E 3F C5 8D 79 75 D6 A1 FE 3B 67 F1 43 99 65 CC EE B1 A8 55 BA E8 8 6 E 8 D 6 E 8 D 6 E 8 D 03 77 1E C3 C0 AE 27 DA 06 3D 8F A5 CC E0 32 3D 65 60 E9 86 A2 65 E2 BB D3 B9 37 4E A6 BF 91 89 02 C5 26 E0 AF FD A8 683 4 2 6 D CA8 683 6 E 6E 84 0A 9D 6C FA BE 85 D3 22 DF 57 61 B9 A8 21 0B A4 6D 89 12 4A 64 25 83 12 60 3D

整体保护工作如下:外部服务可以访问建筑物 - 但每个单独的访问都有时间限制,以防止滥用。卡片必须每天左右刷新。

根据系统文档:

“通过将服务的公钥添加到建筑物的设备中来控制建筑物的访问权限”

和:

“使用 768 或 1024 位私钥的 RSA 加密服务的‘收费设备’允许每天向用户发放徽章”

我同意 - 这似乎是异步密钥系统的反面(分发公钥,然后使用私钥进行加密) - 所以也许他们正在做一些不同的事情(RSA 签名?) - 这就是我试图确定。

这在我看到的硬件代码中得到了证实:

$ PUBKEY = “x31353737443032393837433633413935423531414531343934333038333441454146334632453046344346384336383837414336433844373332443739343832363034464331384441373741394343314635344438303633454145364534324134314232453034443136363338353644373630454142454343464237383342414531443433453145303243353031314538323342323446323931384639384134393632413837354430444639344638303938413141333044433934313330334639384142413139453646393936353937454441443746303343414239313545443442353842374241414432384330423637353933434446434342353339394142”

希望此编辑能够使整个情况更加清晰 - 我感谢您的洞察力和帮助。

1个回答

一个RSA公共密钥由两件事情:模(的两个大素数的产物pq和公共指数)ë(一个小的和往往是固定数,通常3或65537)。

RSA 私钥由与公钥相同的模数m和私有指数d 组成,选择的数字使得x edx (mod m )。通常,d的大小与m大致相同或更短。(或者,也可以存储质数pq,从中可以与e一起计算模数m和私有指数d。)

无论如何,您的 1024 位数字看起来可能是模数(尽管如果是这样,它肯定不应该有任何小因素)。您确定硬件中没有存储其他数字可以作为私有指数吗?

此外,您确定设备实际上是在进行 RSA 加密,而不是RSA 签名,从表面上看,它类似于“使用私钥加密”(尽管使这两个操作安全所需的填充方案的细节大不相同) )?


编辑:我的法语有点生疏,但根据你提供的额外信息以及我可以从 Vigik 网站上一目了然地收集到的信息,看起来他们正在做的事情可能是这样的:

  • 计费服务持有私钥,而访问控制设备持有相应的公钥。该卡可能不持有任何密钥,并且可能实际上也可能根本不进行任何加密。

  • 对卡进行收费时,收费服务会创建一条消息,说明该特定卡在特定时间之前被授权访问特定位置。然后它使用私钥签署此消息并将签署的消息发送到卡。

  • 当卡用于请求访问时,它会将签名的消息传输到访问控制设备,验证该位置的授权是否有效、未过期以及签名是否正确。

至少,这或多或少是设计这样一个系统的方式。这种设计的一个优点是卡和门禁设备都不需要知道私钥,因此即使它们中的任何一个被盗和分析也不会受到损害。(收费服务确实需要私钥,但据推测它可以比卡和访问控制设备更安全,甚至可能通过在远程服务器上进行实际签名。)它也不需要卡本身做任何事情加密,这使它们更容易和更便宜地实施。

(实际上,如果我正在设计这样一个系统并且有一张可以进行 RSA 签名的卡,我也会给每张卡自己的私钥,在授权消息中包含相应的公钥,并拥有访问控制设备请求一张零知识证明,证明卡片确实知道它声称拥有的私钥。这将使卡片真正不可克隆,即使是暂时的,无需进行一些严肃的逆向工程工作来提取密钥。)