V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
different
V2EX  ›  Java

druid 对数据库密码进行加密的疑惑点。

  •  
  •   different · 2020-10-10 11:36:23 +08:00 · 3690 次点击
    这是一个创建于 1507 天前的主题,其中的信息可能已经有所发展或是发生改变。

    参考资料:

    https://www.w3cschool.cn/wqf_java/wqf_java-7gu82mu3.html

    https://www.cnblogs.com/wuyun-blog/p/5674244.html

    我看到 druid 对数据库密码进行加密大概过程就是:

    把运行 jar 包对明文密码进行加密,生成了公钥、私钥、密文。

    然后把公钥、密文放进配置文件中。

    end.

    从中我看到,可以通过公钥、密文就能解密出明文了。

    有几个小疑惑:

    1. 非对称加密中,不是通过私钥、密文解出明文吗?这里怎么是公钥、密文->明文

    2. druid 的配置中把公钥、密文写到配置文件里面了,而根据这两个又能解密出明文。假设我拿到这两个字段,在我本地环境跑一下,我不也很简单解密出明文吗?这个加密后的意义在哪里?都不藏一下,这解密有啥门槛吗?

    谢谢大家。

    19 条回复    2020-10-13 16:44:48 +08:00
    lijialong1313
        1
    lijialong1313  
       2020-10-10 11:49:37 +08:00
    公钥加密,私钥解密,私钥加密,公钥解密。

    我觉得是公钥密文要分开放的,这样不容易拿到。
    AmosAlbert
        2
    AmosAlbert  
       2020-10-10 12:02:04 +08:00
    公钥加密,私钥解密
    different
        3
    different  
    OP
       2020-10-10 12:09:29 +08:00 via Android
    @lijialong1313
    @AmosAlbert
    我看它加密完了,好像就不需要私钥了,这是怎么肥事?
    different
        4
    different  
    OP
       2020-10-10 12:12:08 +08:00 via Android
    @lijialong1313
    第二个疑问能否解惑一下?#dog
    different
        5
    different  
    OP
       2020-10-10 12:13:21 +08:00 via Android
    @lijialong1313 不好意思,我看回答不仔细,尴尬。
    chendy
        6
    chendy  
       2020-10-10 12:21:30 +08:00
    https://github.com/alibaba/druid/blob/master/src/main/java/com/alibaba/druid/filter/config/ConfigFilter.java
    注释里大概解释了一下用法
    加密后的数据和秘钥放一起等于没加密,一般只留下加密后的数据,秘钥放在另外的地方
    kangsheng9527
        7
    kangsheng9527  
       2020-10-10 12:25:39 +08:00
    少用人家集成环境、框架开发,尽可能地使用原生,问问题不要局限于某种语言的方式去问。
    对数据库内的密码加密方式很简单,如果自己的业务 cpu 空闲度较高的那么直接使用挑选 3 到 4 个常用不同的 hash 方式去加密即可。。。
    如果密码来源于客户端还需要在客户端传送密码前加密至少一次才传输,基于“世上没有好人”,什么包括 https 都是不可信的,所以要先加密至少一次再传输。。。
    xiangyuecn
        8
    xiangyuecn  
       2020-10-10 12:33:31 +08:00
    一般是公钥加密,私钥解密。少有私钥加密,公钥解密(很多语言的开发包也没有提供这种)。

    如果你不能保证私钥的安全,密文怎么存都是有被解密的风险的。

    为啥不用私钥解密?因为主要是用私钥签名,公钥验证。公钥公钥:可以公开的密钥😐
    yeqizhang
        9
    yeqizhang  
       2020-10-10 12:42:59 +08:00 via Android
    对于二,我只能理解为提高获取密码的一点复杂度,不让人肉眼看到密码……然后有些公司代码需要第三方工具来扫描漏洞,明文密码不让通过
    jim9606
        10
    jim9606  
       2020-10-10 13:22:58 +08:00
    这些所谓加密都是障眼法,防止二进制包用文本扫描工具把密码扫出来而已。

    看了下代码,旧版本直接在代码里硬编码了密钥,所以就不用配置公钥了,新版换成现场生成,不过其实没区别。

    RSA 的加密算法和解密算法是完全一样的,所以密钥对里哪一个是是公钥取决于你公开哪一个。你可以用私钥加密公钥解密(这是签名的工作模式,druid 用的是这个模式,配置文件要填密文和公钥),也可以公钥加密私钥解密(这是一般意义加密的工作模式)
    different
        11
    different  
    OP
       2020-10-10 14:16:15 +08:00
    @chendy
    @kangsheng9527
    @xiangyuecn
    @yeqizhang
    @jim9606 获益良多!非常感谢,我大概清楚了。
    qwerthhusn
        12
    qwerthhusn  
       2020-10-10 14:30:58 +08:00
    感觉这东西作用不大
    xiangyuecn
        13
    xiangyuecn  
       2020-10-10 14:31:14 +08:00
    @jim9606 #10 有区别的,虽然理论上是就两个大数运算,可以用 e 或 d 来加密都可以。

    但实际上不是这样的,公钥 e 一般等于 65537,用 e 来加密 和 用 d 来加密的速度那是天壤之别。

    另外 私钥 d 是通过 e 作为参数来计算出来的,所有用 d 来加密数据,并不太科学的感觉。

    RSA 学习了很长时间,产出两个开源库: https://github.com/xiangyuecn/RSA-csharp 还有一个 java 版的

    jim9606
        14
    jim9606  
       2020-10-10 15:17:32 +08:00
    @xiangyuecn 事实标准确实不存在选 e 还是 d 的问题。

    密码学库麻烦的是还要考虑各种时序和长度攻击的问题,自己写来练习还可以,实现的话还是用现成的好。

    而且都 2020 年了如果不是为了兼容,都应该换用 Curve25519 或者其他 PQC 算法了。
    Aresxue
        15
    Aresxue  
       2020-10-10 17:18:29 +08:00
    这个主要是为了应付安全扫描,避免数据库用户密码明文裸奔,实际上用加密串半分钟就能解出来用户密码,设置这么简单是因为这种场景下加密太复杂反而会影响启动速度,真正保护数据库其实还是靠的网络层内网隔离
    different
        16
    different  
    OP
       2020-10-10 18:59:24 +08:00 via Android
    @Aresxue 感觉这个网络隔离也只能是防止从外网暴力破解。如果能进入应用服务器了,好像弄个加密稍微能拖延一下时间。
    Aresxue
        17
    Aresxue  
       2020-10-12 10:13:53 +08:00
    @different 差不多是这样子。。。但是阿里的内网只听说道哥进去过。
    kanepan19
        18
    kanepan19  
       2020-10-13 15:19:22 +08:00
    RSA 记住这几点
    公钥加密, 私钥解密
    私钥签名, 公钥验签.
    different
        19
    different  
    OP
       2020-10-13 16:44:48 +08:00
    @kanepan19 明白,谢谢啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1331 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:45 · PVG 01:45 · LAX 09:45 · JFK 12:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.