首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要一个用于putty ssh-2文件mac验证的测试向量。

需要一个用于putty ssh-2文件mac验证的测试向量。
EN

Security用户
提问于 2021-02-18 12:27:22
回答 1查看 106关注 0票数 1

我正在尝试在我的飞镖包中实现putty文件格式。实现实际的密钥加载是可以的,但我正在努力进行mac验证。我不知道我在这里做错了什么

腻子代码非常清楚如何检查它,但是这里仍然有一些问题。putty代码生成如下所示的验证mac:

代码语言:javascript
复制
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);

我的飞镖代码是这样的:

代码语言:javascript
复制
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的第二部分。

也许我的算法是对的,而我又做错了什么?为了深入检查这一点,如果有人能为我提供一个包含以下内容的测试向量,那就太好了:

  • ppkFileContent
  • 密码
  • macData
  • 钥匙
EN

回答 1

Security用户

发布于 2021-02-19 12:23:29

这是一个有效的测试向量。

文件内容:

代码语言:javascript
复制
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数据:

代码语言:javascript
复制
{
    "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键:

代码语言:javascript
复制
[20, 182, 90, 180, 82, 65, 198, 109, 180, 232, 79, 25, 125, 194, 202, 107, 75, 170, 62, 210]

MAC:“7ee3b96fa12f4f9bb12df5c3ccccc0a4eddfdd8b3”

有些文档不太清楚的是,您需要将每个字段的长度添加到mac中。您可以在我的代码中看到这一点。

票数 1
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/245018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档