gpt4 book ai didi

algorithm - 我应该使用哪种公钥算法来加密一小部分字节?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:06:09 26 4
gpt4 key购买 nike

背景故事:
我在写我自己的日志库。是为了爱好。我必须做一件事:必须对记录的数据进行非对称加密。日志消息总是直接写入文件中,不进行缓存,不等待任何队列。
这意味着我必须加密一小段消息尽管瓶颈可能是缺少缓存和IO操作,但我还是希望明智地选择加密算法。
总结:
我必须加密许多小的(<200字节)数据
算法必须是非对称的,我想用公钥加密,只有我自己的私钥才能解密
你建议什么算法?

最佳答案

似乎您正在将“记录的数据必须非对称加密”字面上解释为一个低级需求。“记录的数据必须不对称加密”不是安全要求,而是一种实现方法。这是一种糟糕的实现方法,因为它要求您设计自己的加密协议(您可以使用标准原语,但只能以非标准的方式),而且它会有令人讨厌的限制。
一个更合理的要求是“产生日志的机器不能解密日志”。这是一个安全性要求:它是一个关于资产(日志)安全性(特别是它们的机密性)的要求。
实现此安全要求的方法实际上是使用非对称加密但您不需要使用非对称加密原语并将日志作为输入传递给它。相反,您可以使用hybrid encryption:生成对称密钥,用它加密日志,用非对称密钥加密对称密钥,并删除对称密钥。
最好的方法是使用一个做得很好的库crypto_boxcrypto_box_easycrypto_box_sealNaCllibsodium功能是这里的金标准你把要加密的公钥、要签名的消息传递出去,然后得到一个加密的“盒子”,这个盒子只能用私钥解密crypto_box_easycrypto_box还将您自己的私钥作为参数来签署日志,这在您的玩具示例中可能不需要,但在现实世界中通常很重要。crypto_box_easycrypto_box也使用nonce作为参数;这可以是任何可以是公共的但不能使用两次的值,例如crypto_box_NONCEBYTES字节的随机字符串。
如果你不想使用crypto_box,例如因为你想了解它是如何在引擎盖下完成的,你必须使用你选择的低级密码库手动组装部件。根据使用哪种类型的非对称加密,流是不同的采用ECIES等关键建立方法:
生成随机的一次性私钥y。
计算相应的公共价值Gy。
使用收件人的公钥gx,计算共享密钥gxy。
应用key derivation function例如HKDF来确定地生成秘密对称密钥,例如AES密钥或Chacha20_Poly1305密钥。
使用秘密对称密钥加密日志消息,例如使用AES-GCM或chacha20_poly1305。
或者,散列日志消息并使用公钥对其进行签名。
从内存中擦除一次性私钥、共享密钥、机密对称密钥、明文日志和任何其他中间值。
发送密文、公共值和可选签名。
使用RSA-OAEP等密钥加密方法:
生成随机的一次性密钥,例如aes密钥或chacha20_poly1305密钥。
使用秘密对称密钥加密日志消息,例如使用AES-GCM或Chacha20_Poly1305。
或者,散列日志消息并使用公钥对其进行签名。
使用收件人的公钥加密对称密钥。
从内存中擦除一次性密钥、明文日志和任何其他中间值。
发送密文、公共值和可选签名。
如果确定可以使用相同的对称密钥加密多个日志消息,则手动执行这些步骤可能会提高性能。这对性能有好处,因为非对称操作比对称操作慢这样做没有长期的安全缺陷。唯一的安全缺陷是短期的:来自当前对称密钥的所有日志仍然可以解密例如,如果您决定,如果破坏您系统的攻击者可以读取最后一分钟的日志,则可以每分钟更新对称密钥。

关于algorithm - 我应该使用哪种公钥算法来加密一小部分字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57398747/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com