加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

基于Java中的共享密钥保护数据的创新/安全方法

发布时间:2020-12-14 19:23:45 所属栏目:Java 来源:网络整理
导读:我一直在尝试 Java中的一些基本加密技术(我的首选编程语言),并有一个简单的例子,它使用模幂运算在两个客户端对之间生成共享密钥. 但是,考虑到共享的秘密,实际使用这个秘密加密/解密或加密/解密通过线路发送的数据有哪些简单实现(但是安全)的方法? 例如,如果
我一直在尝试 Java中的一些基本加密技术(我的首选编程语言),并有一个简单的例子,它使用模幂运算在两个客户端对之间生成共享密钥.

但是,考虑到共享的秘密,实际使用这个秘密加密/解密或加密/解密通过线路发送的数据有哪些简单实现(但是安全)的方法?

例如,如果我有字符串:

"So long,and thanks for all the fish"

和共享秘密(BigInteger):

1110278255331388386297296974141977

如何通过线路以一种允许客户互相理解的方式发送字符串,同时确保没有共享秘密,没有中间人可以解释它?

我不是要求完成实现,只是想法或对可以使用的算法/技术的参考.我也避免依赖现有的程序或API(如公钥/私钥),因为这只是我自己教育目的的一个副项目.

解决方法

有一种标准的方法来完成你所追求的,这就是所谓的基于密码的密钥推导.您需要使用安全的对称加密算法.你当然可以选择像RSA这样的非对称产品,但是有一个共享的秘密,这是多余的.

但是,您不希望直接使用共享密钥.

>您的共享密码可能具有不适当的大小以用作密钥.例如,AES作为一个不错的选择,接受128位和256位密钥,共享密钥可能不是很好的匹配.
>您的对称选择算法的关键应该足够安全,这意味着它应该具有您的共享秘密可能缺乏的安全级别的随机性.

这就是为PBKDF2(基于密码的密钥派生函数2)而发明的算法. PBKDF2已经在标准java中实现,您可以使用它.它根据“密码短语”生成任意大小的安全密钥,在这种情况下,这只是共享密钥.这些算法族具有迭代参数,该参数指示应用散列函数导出密钥的次数.确保将其设置为几千的高数字.

我应该注意,安全性(传输数据的机密性和完整性)依赖于您的共享秘密实际上是秘密的.我不知道你是如何产生它的,但是你需要确保这个过程是安全的. Diffie-Hellman Key Exchange就是一个很好的例子.如果您不熟悉这一点,我建议您先看一下,看看有什么办法可以确保流程安全.

正如评论中已经说明的那样,您不需要(也不应该)在实际应用中进行密码学创新.您将找到您已经实施并证明安全的任何内容.尽管我的最后一句话带着一丝盐味.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读