如何使用比 RSA 更短的私钥安全地加密文件?

问题描述 投票:0回答:1

为了提高安全性,我们需要加密存储文件,并为需要访问的用户提供单独的密钥。我已经了解到我应该对文件使用带有

aes-256-cbc
的对称密钥。然后我可以为每个用户使用非对称密钥。我尝试了标准 RSA 与
modulusLength: 2048

我的问题是,私钥太长,无法放置在二维码上(或者专用阅读器无法处理该大小) - 这是必需的。

然后我开始研究椭圆曲线密码学。各种人工智能机器人建议

secp256k1
x25519
。不错的短键。经过各种人工智能幻觉、反复试验,我现在明白需要共享密钥,而不是使用 RSA,然后使用 aes-256-cbc 作为对称密钥。但这意味着我需要通过二维码交出公钥和私钥,而不是像 RSA 那样只交出密钥。

我想知道,这是否有意义?当我同时移交两个密钥以重新创建共享密钥时,与仅创建具有相同长度的任何类型的字节密钥相比,是否有任何优势?

此外我还有对称加密的 IV。每个文件都可以公开吗?我读到每个文件都应该是单独的。人工智能机器人表示它们可以公开。当获取所有加密文件以及所有 IV 的列表时,这不是减轻了潜在的攻击吗?

欢迎任何类型的信息和最新的库推荐(NodeJS + JavaScript)。

# example keys to compare length
{
    "rsa": {
        "publicKey": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm4O9jblPksKoHQkR6OSr\n2UI4VrQPg4Yj5CTRicCjVg6Iijy51WCiN94NY+pOA5RCw5c47+lrnnmFyJaZqrGy\nMwHYGGd1mim61JT6/lR4YbaVC9SHubQCNQd4FJ0q7l/z8FKOSIj7F1qgT7zD0R6Y\ngnWKOIYEBcsvZhU8GPFf25R/YImbTnr4Upub07O1ZUtCaFNni09SLwbnubbLL9Mw\n3Ec66oxq26SQFqRigA4WzzrA+2Es1sU39wLKJc5JImhP3CEYGtLIRYN9PjqV2p9E\nIk+jzS/jDlvZJ/3ZI8ihxV7vu87N0UDKGdtVzpimXG4GEbTlfUEkPivEPgugi/K6\nHwIDAQAB",
        "privateKey": "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCbg72NuU+Swqgd\nCRHo5KvZQjhWtA+DhiPkJNGJwKNWDoiKPLnVYKI33g1j6k4DlELDlzjv6WueeYXI\nlpmqsbIzAdgYZ3WaKbrUlPr+VHhhtpUL1Ie5tAI1B3gUnSruX/PwUo5IiPsXWqBP\nvMPRHpiCdYo4hgQFyy9mFTwY8V/blH9giZtOevhSm5vTs7VlS0JoU2eLT1IvBue5\ntssv0zDcRzrqjGrbpJAWpGKADhbPOsD7YSzWxTf3AsolzkkiaE/cIRga0shFg30+\nOpXan0QiT6PNL+MOW9kn/dkjyKHFXu+7zs3RQMoZ21XOmKZcbgYRtOV9QSQ+K8Q+\nC6CL8rofAgMBAAECggEAEeVvYbOtcRL+kVd9sffoFiM/5Cu/d0rEru3/wQ2j8594\n3gj5TRFcSaKU7DvGnjR9xGVkKNO1+Jw9JZATKf4Ipu8I5QdkP16bAKNjs53ukTbC\nNdok2Qgv6CtZCcJBHQJ6H4dYlrH7dzy3eHBIITTB/I1ginr9qS8F4DEEY/hu/WU4\n9dgo9ZaGCgAexXD/EShwSfetkYi6oDe7DIg7aGtdnhFkouIFR4Sn01mzwe0F8a7n\n/LFGBUSaY94viVd6YCS+dR1UUSvkTWnQDZrROuncZM3JEhVm2yAUGXLVluy4y9ug\nbTnD0bky9pA1YlhYOhsH+mcRqTVzhbcXMPfpwLUI9QKBgQDJV6707h4qsdjnTUzB\ndAFu5ZC08tn4C3AxGHL6Wg9NX4Ccgod8KZBHBpIIxmQj/eIZzmVs9E8aNebh/iy1\nov1nnsVrlTiP/t5b+x65MIyoOZeDcN2TMcyjOdsGCsT33Jm/YqM6SiI68liYO7Yd\n6mWImYUwwf+uwa1IDjLwO1+3wwKBgQDFuz4il3uEq5D6s793ng1FnG9EiUZ8quOD\nkyycha0lF5O9uLuXRBAzUNdv4AFhoGjoC4XSI7Egz25JWj8wEOLfiD16NhCFbn8+\ncJewi9kevZk/ThaviwoaWv8nYKXxRhikT8uQbB3Fq7pjSVwuILeauFsbXPBAWkZS\ngG0Ld59qdQKBgCIWznB5wHHKGsdOtygp0/RKue1pEK6GgUBOu2jXxq968/OLxhSn\nlN3xptgFfv75BUcJQvLnil0Ns0GgH0HBjtX0c8h7Q1Bd/pfkNJd2ONpipdyDR4Cc\ndeFM8mBbgm3U09MriCdeVd1VGtrrgTIfdYFjPMG8luWntQb2IHm8E8CxAoGAI9ZJ\n7q8R3fvSbP3DCAUHVsSBjiRrOBEo5yH3he7ccMqTJmGi7kmRvhs60LYCyhTuro/Y\nEzwQ0GeID5dhuG53EBh7O/ksiWJ7gW+aro7KLT4j1ktq5SoIDLrNX++uY8pWkQE9\nXdGam8cCIxiasmmPnWUobg8sJB24fR91pAxsQjkCgYEAyMhE36eZf5QhvYhggBnD\n1GF6WKRVyXCFAVx3DO1FgRbw+KVuFLa0IRJ2JfiwKx9YDuKjwAw06rStCtU2ItVT\ns5QUYre+ojne4NbZqUwLA1LunMlQUeKJvYAIvUQmpUmP9G9lG4xfTHyEIt6Ez8u5\nIXflUi4ssrTEhS9EdVNQ6nE=",
        "type": "rsa"
    },
    "ecc": {
        "publicKey": "MFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEvcegDDQnifb4SJKn7P75caFkXKrXtdldJz7bvOzcjpao8iCqvgA/kDhHaNRquHWuZXKsuxGY4bLGOloxEBl2Ig==",
        "privateKey": "MIGEAgEAMBAGByqGSM49AgEGBSuBBAAKBG0wawIBAQQgsceHVsfG7CSW2izfCcsD3NSqiu01WWHOcjPbz2UkS3WhRANCAAS9x6AMNCeJ9vhIkqfs/vlxoWRcqte12V0nPtu87NyOlqjyIKq+AD+QOEdo1Gq4da5lcqy7EZjhssY6WjEQGXYi",
        "type": "secp256k1"
    },
    "ecx": {
        "publicKey": "MCowBQYDK2VuAyEA6CVjrWVhoPgmS724cWTMUv+nQB6ke6Yuq1DQljYjmX8=",
        "privateKey": "MC4CAQAwBQYDK2VuBCIEIFC+z5tefBAqS8YdTswdqPL7mVkbo1wTnbqmtkQiFxJp",
        "type": "x25519"
    }
}
javascript node.js encryption elliptic-curve
1个回答
0
投票

首先,您永远不发送私钥。相反,公钥需要从接收者传输到发送者。发送者需要“信任”该公钥来自预期的接收者,否则对手可以用自己的公钥替换该公钥。

AI 可能会建议 ECIES。在这种情况下,您基本上使用 ECDH 来创建加密方案。

您感到困惑的原因是ECIES有

两个

密钥对,一个静态密钥对和一个临时密钥对。静态密钥对由接收方拥有,并且发送方需要知道并信任其公钥;私钥一如既往地由接收者保管。原则上,ECDH 公钥(部分)可以仅作为两个坐标进行传输,这对于密钥大小为 256 位的 ECDH 意味着 512 位最小开销。但是,这不包括建立信任所需的任何数据;通常公钥是 (X.509) 证书或证书链的一部分。 临时密钥对是由发送方使用相同的域参数生成的新生成的一次性密钥对。接收方的临时私钥和公钥(部分)用于密钥协商(通常后跟密钥派生函数)以派生秘密密钥,例如 AES 密钥。该密钥可用于加密消息,之后可以在发送方销毁临时私钥和秘密密钥。然后,发送者将其临时公钥以及密文消息发送给接收者。

现在出现了技巧:由于 Diffie-Hellman 密钥协议,接收者可以使用临时公钥和静态私钥来派生

相同的

秘密密钥。然后使用该密钥来解密密文,之后可以丢弃临时公共密钥。

对于 IV:由于该方案的密钥始终是新生成的,因此您可以将 IV 两侧都保留为全零(或与密钥一起重新导出)。您可能会说该方案比 RSA 加密有缺点,但请提醒您,由于需要填充,RSA 加密或密钥包装也具有
显着的开销

总而言之,人工智能并没有错,但评估答案需要对密码学有很好的了解。


© www.soinside.com 2019 - 2024. All rights reserved.