- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想验证使用 ECDHE 接收到的椭圆曲线公钥上的签名,但我找不到任何引用资料可以清楚地说明哪些字节已签名。
我使用密码套件 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) 建立了到 google.com 的 TLS v1.2 连接。我用 Wireshark 捕获了流量,我可以看到客户端问候语、服务器问候语、证书和服务器 key 交换消息。我的理解是,谷歌发送的 EC 公钥是使用谷歌发送的证书私钥(在本例中为 RSA)签名的。
这是服务器 key 交换消息:
160303014d0c0001 490300174104f930
e65768e0587ec7e1 b8b537ccd6ae2500
3a364b84a68ed7c0 47d18dd104afb63c
cc72e800495db3cd d629807f0d4501a4
c043c5c7c52aea45 a66692aa11b60201
01007ec0b1ef4994 30f42f3ed9a7a592
92c0f875ad7cd2f8 5b36a7aec804f602
2959549a8a3d0e5c 5825fefa4d69f360
34eaad7138e5da69 61bdfb88ddb5172c
ba64071de0764fc1 c8b895dbc52ec85c
3b7891c53e6d843b 44f80c481a9beb86
c444b32204e9bc6c 6665e6dd26887c5e
fc4e331fbdd66536 686b6b5f16072b52
ee2fee75ca65e28f a0ee0644b91fba30
783798aa83cf28f1 394b1344b43104cb
89aed55030bd7561 d13ae20d4d7bc17e
682e6c6266f04bf6 31665a547e2f15b3
c79fda548a781d39 5d64f4eea75aac96
9374ce60400fdc11 3a3d5a98b62f63b7
6e5324797c938f39 bc1cc5736b612bd7
7a1bc790841d4e25 dae648cab33273e2
588c
解析这个给出:
160303014d - 记录头
0c - 服务器 key 交换消息
000149 - 消息长度
03 - 命名曲线
0017 - secp256r1 曲线
41 - 公钥长度
04 - 不确定这是什么意思
f930e6...04af [32字节] - 公钥的x值
b63ccc...11b6 [32字节] - 公钥的y值
02 - SHA-1 哈希
01 - RSA 签名
0100 - 签名长度
7ec0b1...588c [256 字节] - 签名值
使用我在证书消息中收到的证书,我能够对 EC 公钥的签名执行公钥操作,它看起来像是经过适当填充的 SHA-1 哈希。但是,我无法验证此哈希值。我尝试了原始 EC 公钥及其 header 的许多不同组合,但我没有正确尝试哈希。
这是我检索哈希的方法:
openssl rsautl -inkey ~/googlePubKey.pem -encrypt -in ~/googleECpubkeysig -pubin -raw |十六进制转储
0000000 0100 ffff ffff ffff ffff ffff ffff ffff
0000010 ffff ffff ffff ffff ffff ffff ffff ffff
*
00000d0 ffff ffff ffff ffff ffff ffff 3000 3021
00000e0 0609 2b05 030e 1a02 0005 1404 3ac5 fb13
00000f0 9ff8 77f1 6a69 09af 472a 90b2 cac6 b4f8
0000100
最后 20 个字节看起来像 SHA-1 哈希,这是签名中指定的算法。我应该对来自服务器 key 交换的哪些字节进行哈希处理以获得该值?或者,是否存在我必须在散列之前执行或添加的某些转换或其他数据?
最佳答案
我缺少客户端随机数和服务器随机数。感谢 JamesKPolk 提供的引用资料和这篇相关帖子在其中一条评论中提到了两个随机值:https://security.stackexchange.com/questions/80619/tls-1-2-handshake-how-is-the-ecdhe-public-key-signed-by-server .
我上面的示例(括号中为十六进制值)要散列的完整值是:
client_random(32 字节)+ server_random(32 字节)+ named_curve (0x03) + secp256r1_curve (0x0017) + length_of_public_key (0x41) + first_byte_of_key (0x04) + key_x_value + key_y_value
当我使用这个值时,哈希匹配并且签名验证正常。
关于ssl - 如何验证 RSA 签名的 ECDHE 公钥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32790141/
如何选择随机哈希键?对于 my Flash+Perl card game我正在尝试从哈希中随机选择一张卡片,其中的键是:“6 黑桃”、“6 俱乐部”等,如下所示: my $card; my $i =
每当我收到对端点的请求时,我都会使用openssl crate 生成随 secret 钥。我将使用新生成的 key 来加密请求数据,并将其作为响应发送回去。 use openssl::rsa::{Rs
我们知道,我们在代码中生成的“随机”数实际上是伪随机数。在Java的情况下,它们默认使用时间戳作为随机种子,并且从该点开始确定性地创建时间戳之后产生的每个随机数。 如果您使用随机数生成密码,并且恶意方
我想用java生成一个128位随 secret 钥。我正在使用以下内容: byte[] byteBucket = new byte[bytelength]; randomizer.nextBytes(
这个问题已经有答案了: Pick random property from a Javascript object (9 个回答) 已关闭 7 个月前。 如果我有以下内容: var liststuff
我做了一些研究,找不到我需要的东西,基本上我想生成一个具有以下格式的随 secret 钥 XXX-XXX-XXXX 最佳答案 这是一个快速的 Javascript 解决方案: let r = Math
在 Firebase 中,可以使用 .childByAutoId() 创建随 secret 钥 let newEntry = FBRef.child("category").childByAutoId
假设我有一个带有大量键的对象: const myObject = { "a": 1, "b": 2, "c": 3, ... } 如果我存储了一个单独的 key 列表,
我需要计算一些字符串的签名,并计划这样做: using (HMACSHA256 hmacSha256 = new HMACSHA256( )) { Byte[] dataToHmac
我的任务是生成随机的 80 字节 key ,我决定遵循以下策略 在我的电脑中sizeof(char)=1 所以我创建了一个英文字母数组 char *p=" "; char a[0..26] and i
我正在设计一个广告系统,该系统根据广告的权重(出价)在广告之间随机轮换。 local ads = local ads = { ["a"] = { views = 0,
我有一个整数列表(员工 ID)它们都是8位长(虽然几乎都是00开头,但实际上都是8位长) 我需要为每个员工生成一个 key : - 5 chars including [A-Z][a-z][0-9]
我使用 KeyPairGenerator 生成 RSA key 对,我注意到它始终生成完全匹配的 key ,而不是应有的随 secret 钥?也许有人知道为什么会这样? 我的代码现在看起来像这样: p
我正在运行一个 FIRESTORE 数据库,我想创建一个具有与 firestore 相同的模式 的随 secret 钥。 在链接中,我找到了创建文档后调用的函数with: 'db.ref.add()'
这个问题已经有答案了: Add a property to a JavaScript object using a variable as the name? (14 个回答) Creating ob
我想生成 1M 随机(出现)唯一字母数字键并将它们存储在数据库中。每个 key 的长度为 8 个字符,并且仅使用子集“abcdefghijk n pqrstuvxyz 和 0-9”。 字母 l、m、o
我想生成像“7HzdUakp”这样的唯一 key 。 我想将其放入数据库(mysql)中,但我想要几乎无限的组合。 我可以使用随机函数生成它,但有时它可以生成相同的 key 两次 已解决 - 我根据“
我有一个我似乎无法弄清楚的基本问题。我正在尝试在 AES-256-CBC 中生成一个可用于加密/解密数据的随 secret 钥。 这是我正在做的: require 'openssl' cipher =
如果您对 Azure 网站使用自动缩放,是否需要设置计算 secret 钥,以便可以在计算机之间共享加密的身份验证 token ? 这里有一个问题,似乎be the same正如我所问的那样。然而,这
我想根据创建日期和时间从 Firebase 中检索数据我还没有找到任何其他方法,而不是通过使用 orderByChild("Create") 创建每个用户的 child 来保存创建日期和时间排序,但是
我是一名优秀的程序员,十分优秀!