我正在尝试在我的飞镖包中实现putty文件格式。实现实际的密钥加载是可以的,但我正在努力进行mac验证。我不知道我在这里做错了什么
腻子代码非常清楚如何检查它,但是这里仍然有一些问题。putty代码生成如下所示的验证mac:
hash = ssh_hash_new(&ssh_sha1);
put_data(hash, header, sizeof(header)-1);
if (cipher && passphrase)
put_data(hash, passphrase, passlen);
ssh_hash_final(hash, mackey);
mac = ssh2_mac_new(&ssh_hmac_sha1, NULL);
ssh2_mac_setkey(mac, make_ptrlen(mackey, 20));
ssh2_mac_start(mac);
put_data(mac, macdata->s, macdata->len);
ssh2_mac_genresult(mac, binary);
ssh2_mac_free(mac);我的飞镖代码是这样的:
var sha1Hash = SHA1Digest()
..update(Uint8List.fromList("putty-private-key-file-mac-key".codeUnits), 0, "putty-private-key-file-mac-key".codeUnits.length);
if (password != null) {
sha1Hash.update(Uint8List.fromList(password.codeUnits), 0, password.codeUnits.length);
}
var key = Uint8List(20);
sha1Hash.doFinal(key, 0);
var macResult = Uint8List(20);
var mac = HMac(SHA1Digest(), 64);
mac.init(KeyParameter(key));
mac.update(Uint8List.fromList(macData.codeUnits), 0, macData.codeUnits.length);
mac.doFinal(macResult, 0);我非常肯定,为mac创建密钥的第一部分是正确的,因为相同的代码用于解密私钥,并且按预期工作。我不确定创建实际MAC的第二部分。
也许我的算法是对的,而我又做错了什么?为了深入检查这一点,如果有人能为我提供一个包含以下内容的测试向量,那就太好了:
发布于 2021-02-19 12:23:29
这是一个有效的测试向量。
文件内容:
PuTTY-User-Key-File-2: ssh-ed25519
Encryption: aes256-cbc
Comment: ed25519-key-20210211
Public-Lines: 2
AAAAC3NzaC1lZDI1NTE5AAAAIHOsd4LSZlb3xokKjybt5q1CxL3gHmqhNmaOaCNM
X43n
Private-Lines: 1
b6LQNEHpLzACUyQLVAsbRUnKlKUVCfFEZGq5DcrAgOd8cm4EVPrdOoGrAeeJs8Av
Private-MAC: 7ee3b96fa12f4f9bb12df5c3ccccc0a4eddfd8b3密码:密码
mac数据:
{
"algorithm": "ssh-ed25519",
"encryption": "aes256-cbc",
"comment": "ed25519-key-20210211",
"publicKey": [0, 0, 0, 11, 115, 115, 104, 45, 101, 100, 50, 53, 53, 49, 57, 0, 0, 0, 32, 115, 172, 119, 130, 210, 102, 86, 247, 198, 137, 10, 143, 38, 237, 230, 173, 66, 196, 189, 224, 30, 106, 161, 54, 102, 142, 104, 35, 76, 95, 141, 231],
"privateKey": [0, 0, 0, 32, 141, 73, 118, 119, 135, 33, 122, 2, 181, 240, 18, 204, 171, 163, 81, 33, 160, 138, 171, 176, 50, 73, 106, 3, 203, 14, 219, 151, 10, 35, 60, 212, 221, 202, 157, 227, 53, 116, 1, 82, 247, 119, 115, 198]
}HMac-SHA-256键:
[20, 182, 90, 180, 82, 65, 198, 109, 180, 232, 79, 25, 125, 194, 202, 107, 75, 170, 62, 210]MAC:“7ee3b96fa12f4f9bb12df5c3ccccc0a4eddfdd8b3”
有些文档不太清楚的是,您需要将每个字段的长度添加到mac中。您可以在我的代码中看到这一点。
https://security.stackexchange.com/questions/245018
复制相似问题