开发者生态
morning
可怕的公钥技巧
摘要
Horible public key tricks: 2026-11-08 — 2026-11-09 So, I've always been somewhat annoyed at SSL/TLS. It requires everyone to go through a complex "ACME" dance just to put up a public website. Worse, c...
the
certificate
public
key
one
and
protest
2026
always
SSL
2026-11-10
1 阅读
约9分钟阅读
Curiositry
字号:
可怕的公钥技巧:2026-11-08 — 2026-11-09 所以,我一直对 SSL/TLS 有点恼火。它需要每个人都经历复杂的“ACME”舞蹈才能建立一个公共网站。更糟糕的是,证书每隔几个月就会过期,因此这不是一劳永逸的事情:即使实现了自动化,维护证书也需要小心确保 ACME 客户端始终能够访问 DNS 记录或 Web 服务器。 ...整个系统甚至无法工作,因为证书是通过明文连接颁发的,并且受信任的证书颁发机构使用非常安全的密钥,例如“4”有抗议 SSL 实现的现有技术,但我实际上想加密网络流量。被动窃听是一种真正的风险......但防止它不需要整个证书:因此,最好的选择是抗议证书。我直接控制的证书的唯一部分是公钥。因此,获得不良证书的最简单方法是使用虚荣私钥,例如 313333333337(最重要的质数之一)。然而,虽然由此产生的公钥很弱,但除非试图破解它,否则没有人会知道。一个好的抗议应该是显而易见的: # openssl s_client -connect maurycyz.com : 443 < /dev/null 2> /dev/null \ | sed -n /BEGIN/,/END/p | sed -n /BEGIN/,/END/p | grep -zE '////.?*////' --color= yes -----开始证书----- MIFAjCCA+qgAwIBAgISBkOkuuyaN1ypD3PAPrLMyT7tMA0GCSqGSIb3DQEBCwUA MDMxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQwwCgYDVQQD EwNZUjIwHhcNMjYxMTA5MTcyOTQ2WhcNMjcwMjA3MTcyOTQ1WjAXMRUwEwYDVQQD EwxtYXVyeWN5ei5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCg JyPf37Sj6PvU06m5 ////You+dont+actually+have+to+pick+random+privat e+钥匙//没有+一个+检查+这些+东西//A+证书+权限+得到+离开+with+the+number+4+for+a+year///// DSfCAfXcsJfBpnHekS0qnf5YLl c54VuUNRVINcDkEwJDwyB96+xE/uXhtiGdk8ty1PF6jciLEYCJBHcmqOa5pOyV8m 63yR3NE6hCQlaSLQQDo96Sb0/10aC5LqE7KwEskrP/qeCzT7vDN7fh+dXOGs+VMw eJvTAb0xHJpxhSK05i7DAgMBAAGjggIqMIICJjAOBgNVHQ8BAf8EBAMCBaAwEwYD VR0lBAwwCgYIKwYBBQUHAwEwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQUBKBfDbwf dCnKeU83pMTWyFrJBwAwHwYDVR0jBBgwFoAUQBUtJnntMiCe35pyHdYyH4EMgQww MwYIKwYBBQUHAQEEJzAlMCMGCCsGAQUFBzAChhdodHRwOi8veXIyLmkubGVuY3Iu b3JnLzAnBgNVHREEIDAegg4qLm1hdXJ5Y3l6LmNvbYIMbWF1cnljeXouY29tMBMG A1UdIAQMMAowCAYGZ4EMAQIBMC8GA1UdHwQoMCYwJKAioCCGHmh0dHA6Ly95cjIu Yy5sZW5jci5vcmcvMTEwLmNybDCCAQsGCisGAQQB1nkCBAIEgfwEgfkA9wB1AExj 3JjlnB2riPYeij3ero+rRKM3e1+blMP7oZz8wb4mAAABocGRbw4AAAQDAEYwRAIg HShWaEI2nVJEizSI6sJ/jnLaABZ3aTKoUL3pLo1uOgsCIEn+XiT2WHhm9LGN6kug O9R7Z4q0HiFA4RZ7tIMJQH5XAH4AjspHC6zeavOiBrCkeoS3Rv4fxr+VPiXmm07k AkjzxugAAAGhwZFyfQAIAAAFAEE0hdwEAwBHMEUCIDSms4Vf0llcvcldJd2Ool8i AiUQQlS0Zzbej+7Y1aR7AiEA79Ll+t6inu1PkUIgzNTXkE0S20VHYEYel5fkdKSA VTQwDQYJKoZIhvcNAQELBQADggEBAFi3A4fcjj4UKa9MFz1a8DWc+Jya2gJng13m 2UFdWCaqsN7FJWQEjRiJ0npynmDnA3VMyjswUMHAMx4d8G3lHNPfZWGsCgpjVa/d IEoeZ6gTYjFa/Ovb64m4CcuQkm0GxcyAqMPs348e6Px32iU1R6MnV4UEUosnSPeK 4ocuI3SOR9LHxx/yHOKCYTKLpIMwMdaAmWt0N7l59GOb8o+dz3R7cxtVV/lrZReZ /YPEAYRiNi7f+jNI1JCp0i8wXUb9NN7WlbmcFDecDG/++cRpAkoIk4m/LJindsuu kErrVZ4yLqB0Hvm+uNvWxr9y/qKFTYw9POx1oaZJO/SwXZdDBeY= -----结束证书----- 首先,让我们看一下数学框架RSA。要生成密钥,请选择两个大素数(p 和 q)并将它们相乘以产生模数 (n)。选择一个小数,e 作为公共指数。 RSA 公钥由模数 (n) 和公共指数组成: # 加密需要知道 e (public) 密文 = 明文^e mod n 私钥包含模数和私有指数 (d),该指数被选择为 e 模 n 的乘法逆元。 d 的具体计算方式并不重要,但该过程需要知道 p 和 q。 # 解密需要知道 d (pivate) = 密文^d mod n = 明文^e^d mod n = 明文^(e*d) mod n = 明文^1 mod n = 明文 好吧,回到虚荣密钥。 e 的标准值为 65537 (0x10001),因为设置的位数较少,加密速度更快。事实上,我使用的 CA 会拒绝使用非标准公共指数签署密钥,所以我不能在那里做任何有趣的事情。模数 n 是 2,048 或 4,096 个“用户控制”位,因此它是隐藏消息的理想位置。但是,要使用该证书,我需要找到两个大素数,它们可以乘以虚荣模数。我的方法首先选择两个随机素数并计算所得的 n 值。然后,修改n的字节以将消息引入base64编码。当然,修改后的n不是p和q的乘积,但这可以通过将q设置为n/p来解决。得到的 q 值不太可能是素数(或整数),因此我将其舍入并找到理想 q 之后的下一个素数:这通常只需要将 q 值更改几百即可。由于 p 和 q 大小相似,q 的微小变化只会影响乘积的最不重要的一半: 58174124 * 918491824 = 53432457262362176 (递增直到下一个素数
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱