实用密码学
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
1446 人已学习
立即订阅
登录后,你可以任选4讲全文学习
推荐试读
换一换
开篇词 | 人人都要会点密码学
免费
02|单向散列函数:如何保证信息完整性?
03|如何设置合适的安全强度?
课程目录
已完结/共 24 讲
开篇词 (1讲)
开篇词 | 人人都要会点密码学
课前必读 (1讲)
01 | 学习密码学有什么用?
学会使用哈希函数 (4讲)
02|单向散列函数:如何保证信息完整性?
03|如何设置合适的安全强度?
04|选择哈希算法应该考虑哪些因素?
05|如何有效避免长度延展攻击?
学会使用加密算法 (15讲)
06|对称密钥:如何保护私密数据?
07 | 怎么选择对称密钥算法?
08 | 该怎么选择初始化向量?
加餐 | 密码学,心底的冷暖
09 | 为什么ECB模式不安全?
10 | 怎么防止数据重放攻击?
11 | 怎么利用解密端攻击?
12 | 怎么利用加密端攻击?
13 | 如何防止数据被调包?
14 | 加密数据能够自我验证吗?
15 | AEAD有哪些安全陷阱?
16 | 为什么说随机数都是骗人的?
17 | 加密密钥是怎么来的?
18 | 如何管理对称密钥?
19 | 量子时代,你准备好了吗?
案例分析 (1讲)
20 | 综合案例:如何解决约会难题?
结束语 (2讲)
结束语 | 深挖坑、广积粮
结课测试 | 这些密码学的知识,你都掌握了吗?
实用密码学
15
15
1.0x
00:00/00:00
登录|注册
开通超级会员可免费学习本课程,还可解锁海量内容免费学特权。

06|对称密钥:如何保护私密数据?

你好,我是范学雷。
在上一个模块,我们学习了单向散列函数。从今天开始,我们将开启一个新的模块,在这个模块里,我将跟你讨论加密技术的相关知识。是不是感觉上一个模块的学习还意犹未尽?
别着急,单向散列函数还会出现在我们的视野里。那么,加密技术是用来做什么的呢?
还记得上一讲,我们讨论了单向散列函数的使用场景吗?其中,一个重要的限制是我们需要确保给定的散列值不能被修改。这个简单、直观的限制,给单向散列函数的使用套上了一个紧箍咒。
这说明在很多场景下,我们并不能仅仅使用单向散列函数来解决数据的完整性问题。要想去掉这个紧箍咒,扩大单向散列函数的适用场景,我们还需要其他技术,比如加密技术。
那加密技术是怎么帮助单向散列函数解决完整性问题的?这个疑问立即就来到了我们面前。不过不用担心,我们需要一点时间来了解这个问题,以及解决问题的办法。
今天,我们先来讨论第一类加密技术:对称加密技术。

什么是加密?

在讨论对称加密技术之前,我们要先了解加密、解密和密钥这几个概念。
其实这几个概念还是很容易理解的。把信息或者数据伪装、隐藏起来,转换成难以解释的信息或者数据,这个过程叫做加密。和加密这个过程相反的过程,就叫做解密
一般来说,加密产生的那个难以解释的信息或者数据,我们把它叫做密文(Ciphertext)。对应的,加密前的数据,我们通常把它叫做明文(Plaintext)
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
开篇词 | 人人都要会点密码学
免费
02|单向散列函数:如何保证信息完整性?
03|如何设置合适的安全强度?
04|选择哈希算法应该考虑哪些因素?
08 | 该怎么选择初始化向量?
13 | 如何防止数据被调包?
开通超级会员免费畅看本课程
开通会员
该文章仅可免费阅读部分内容,如需阅读完整文章,请开通超级会员或单独购买本课程。
登录 后留言

精选留言(8)

  • sugar
    “大部分情况下,我们自行发明的密码学算法都是灾难。”有关这句,想问一下:我的理解是需要加一个前提,自行发明的算法程序可以被外部获取到大量明文密文对儿,从而逆向推导我的算法。 我想讨论的是,如果这个算法在某个系统的服务端内部,整个服务端代码只有我一个人有权限,对外输出的 可被客户端访问到的东西 只有大量的密文,这种情况下外界是否有可能攻破我自己发明的这个脆弱的加密算法呢?

    作者回复: 你就不嫌麻烦吗?你放心,你的老板放不放心?你的老板放心,股东放不放心?股东放心,客户放不放心?客户放心,你家人放不放心?麻烦比你想象的多。

    请看文章“什么是加密?”这一部分的前半段,尤其是下面的话:“当初算法的设计者还健在吗?当初算法的实现者还健在吗?算法实现的代码还在吗?算法运行的环境还在吗?解决掉其中任何一个问题,我们就能破坏掉算法的保密性。” 这些都比逆向推导简单。更何况,王母娘娘还能请你去蟠桃会吃酒喝茶。当然,逆向推导和破解128位的密钥比起来,也不是一个数量级的难度。只不过,的确没有必要逆向推导,找到你就行了,软的不行就来硬的,你保守秘密,你就承担责任(换句话说是风险)。

    2020-12-05
    8
    5
  • Litt1eQ
    默认情况下,网络通信的信道是不可信的,在不安全的信道中传输对称加密的密钥是一个比较麻烦的问题

    作者回复: 所以,千万不要在不安全的通道传输对称密钥;甚至,也不要在安全的通道传输对称密钥。

    2020-12-04
    4
  • 天天有吃的
    问题3:密钥是怎么产生的,密钥可以通过加密算法得到吗,那么如果加密算法是公开的,密钥是不是也就能知道了?

    作者回复: 这是一个好问题,密钥不能单纯地通过加密算法得到。我们后面还会讲密钥是怎么产生的。

    2020-12-04
    2
    3
  • qinsi
    Telegram的MTProto协议据说用了自己发明的算法。另外微信仿照TLS1.3开发的mmtls,据说使用的都是公开的高强度算法,那就不算是自己发明加密算法了吗?

    作者回复: 没太明白这个问题。“自己发明的算法”当然是“自己发明的算法”。我不了解这两个协议,不知道它们有没有发明“加密”算法。

    2020-12-04
    4
    1
  • 纳兰容若
    看完老师的文章终于懂了 现代密码学为什么需要密钥这个东东了
    2021-09-02
  • 追风少年
    现在项目里都是明文的密码,日志,数据库全中,尴尬😓

    作者回复: 嗯,不惊讶。 快想办法吧。

    2020-12-14
  • 孜孜
    我们公司的旧项目,会往cookie里面写入加密信息。比如accountinfo,然后Java code会用一个common的jar去解密。虽然没有研究过,不过可能不是公开算法。。

    作者回复: 是不是在cookie里写入机密信息?需要注意的是,使用公开的算法,不算是自己发明算法。

    2020-12-04
  • 天天有吃的
    问题2:哈希跟加密验证数据方式有些不同,似乎都是把原本的数据处理成难以解释的数据,这两个难以解释的结果有什么区别吗?

    作者回复: 哈希逆向运算困难,加密可以逆向运算。

    2020-12-04
收起评论
8
返回
顶部