CAN304 W2

Classical and modern cryptography

Classical cryptography 完全依赖于通信双方之间共享的秘密信息(Private-key cryptography, 又叫 secret-key / shared-key / symmetric-key cryptography)。

Secure communication:双方共享一个密钥,用于安全通信。

Secure storage:单个用户可以在一段时间内安全地存储数据。

Private-key encryption

The shift cipher

对字母进行加密,如果密钥 k = 1,那么字母 A 加密后变成字母 B ...。解密的时候逆向进行该操作。

Frequency analysis: Match up the frequency distribution of the letters.

然而 shift cipher 并不安全,因为它的密钥空间 (key space) 较小,仅为 26。

密钥空间应足够大,以防止"暴力破解 (brute-force)" 详尽搜索攻击 (exhaustive-search attacks)。

The Vigenère cipher

现在密钥是一个字符串。

要进行加密,将内容依据密钥指示向后挪动相应的位。解密即反转该过程。

例如:k=‘cafe’ (a 代表 0,b 代表 1 ...)

key space:如果 key 是一个长度为 14 的字符串,那么 key space 的大小为 \(26^{14} \approx 2^{66}\)。

因此 Vigenère cipher 很安全,使用 brute-force search 几乎不可能。

不过如果被人知道了 key 的长度,那么破解起来就很容易:假如 key 长度为 14,那么位置在第 1,15,... 的元素都是用同一种方式加密,这样就可以破解密码。

Symmetric encryption

注:E 是加密算法,D 是解密算法。K 是密钥,M 是明文信息,C 是密文信息。

Stream ciphers vs. Block ciphers

Stream ciphers:对于一个密钥 k (k 一般比明文 m 短),使用算法 G 将 k 变得和 m 长度一致 (k 是种子密钥,G 是随机数发生器,生成的结果为 key stream),然后对明文一个一个 (一 bit 一 bit) 进行加密。解密为其逆过程。

Block ciphers:将 m 分成指定长度的 block,一块一块进行加密。

两者的主要区别是按 bit 加密,和按块加密。

Advantages of block ciphers:

  • Good diffusion

    • 更容易使一组加密字符相互依赖,因为 block 中有多个 bit,这些 bit 一起被加密,之间会产生联系
  • Immunity to insertions
    • 加密文本是已知长度,因为我们知道 block 的长度,如果给密文中插入,那么长度就会不一致
  • Most common Internet crypto are done with block ciphers

Disadvantages of block ciphers:

  • Slower

    • 在加密/解密开始之前需要等待数据块
  • Worse error propagation
    • 错误会影响整个块 (要是出错,整个块都会出错)

Block ciphers (AES)

The Data Encryption Standard:DES,Block ciphers 的一种。

使用 substitutions (替换), permutations (排列,比如改变顺序), table lookups (表查找) 进行加密;加密会进行很多轮,每轮重复上述操作。但 DES 并不安全,因为其 key 不够长 (short key)。

The Advanced Encryption Standard:AES,可以作为 DES 的替代品,使用 combination of permutation and substitution 加密。

AES Internals (下面不考)

一个 128 bit 的 process block 可以选择长度为 128, 192, 和 256 bit 的 key。

我们可以将 16 byte (16 byte = 128 bit) 的明文看成由 byte 组成的二维 array s,这个 array 被称为 internal state。

AES 使用 SPN structure 转换 array 的 byte、列和行,以生成密文。

Substitution–permutation network (SPN)

  • AddRoundKey

    • SPN 每轮会产生一个 round key,round key 的长度为 4,即每个元素 32 bit。将 128 bit 的 round key 和 internal state 中的数据进行逐位异或操作
  • SubBytes

    • 根据 S-box 将每个 byte (s00, s01 ,... , s33) 替换为其他 byte (假如 s01 的值为 2e,那么它将被替换为 31)

  • ShiftRows

    • 将第 i 行的第 i 个位置的元素移动到最左边 (整行一起移动)

  • MixColumns

    • 将每列的 4 个 byte 作为输入,和一个给定的 matrix 相乘,从而将它们转换为新的 byte

  • KeyExpansion

    • 从 16 byte 的 initial key 创建 11 个 16 byte 的 round key (k0-k10),其中使用和 SubBytes 中一样的 S-box 和异或操作

      注:上面是 Key schedule function,k 是 initial key,w 是 round key (也是 16 byte)。通过上述机制生成 round key。

AES 与 block cipher 一样安全:所有输出 bit 都以某种复杂的伪随机方式依赖于所有输入 bit。但没有证据表明 AES 对所有可能的攻击免疫(例如,新的侧信道攻击,new side-channel attacks,核心思想是通过加密软件或硬件运行时产生的各种泄漏信息获取密文信息)。

Cryptographic modes

Block cipher 和 stream cipher 都是基本的加密方式,但现实中要求的加密可能更复杂 (比如 block cipher 只能加密固定长度的内容,但现实中要求加密任意长度的内容)。因此,应用 cipher 的方法就是 cryptographic mode。相同的加密方式可以用在不同的模式中。

ECB Mode

Electronic Codebook (ECB) Mode:ECB 是 block cipher 的一种最基本的工作模式。在该模式下,待处理信息被分为大小合适的分组,然后分别对每一分组独立进行加密或解密处理。

但 ECB 的所有分组的加密方式一致,这会导致相同的明文被加密后的密文也相同 - 不安全。

CBC mode

Cipher Block Chaining (CBC) mode 可以将一组相关的加密块绑定在一起,并隐藏相同内容的两个块。

CBC 使用先前块的密文来加密当前块:将先前块的密文和当前块的明文进行异或操作,再加密其结果。这样每个块的加密取决于所有先前块的内容。

不过 CBC 有一个缺陷,对于第一个 block 没有之前的块进行加密,这会导致和 ECB 相同的问题。因此我们使用 initialization vectors (IV) 来解决这个问题。

IV 会随机生成一个 string 来代替之前的块对第一个块进行加密。这确保了加密结果始终是唯一的。

解密方会收到 IV 以及一系列密文 (C1, C2, ...)。

PCB: previous ciphertext block

PPB: previous plaintext block

Uses of symmetric cryptography

Symmetric cryptography 可以被用于很多事:

  • Secrecy (confidentiality):只有知道密钥的人才能解密 - 保证机密性

  • Authentication

    • 只有我和 A 知道密钥 k,如果我发消息给某人,那人解密了消息,那人必然是 A

    • 但这存在一些问题,比如 non-repudiation problem:只有我和 A 知道密钥,我加密了一个消息,但我否认是我加密的,这样第三方就不知道到底是谁加密的消息 (因为我和 A 都可以加密)。

      同样的,如果是三个人共享密钥,那就更不知道到底是谁加密的消息 (这种情况可以通过加密公钥来解决,即非对称加密)。

      如果 authentication 的时候不考虑泄密问题,可以不使用加密。

  • Prevention of alteration (integrity):Changing one bit of an encrypted message completely garbles it. For many forms of cryptography, ciphertext à plaintext (meaningless, unreadable) 更改加密消息会使解密后的明文变得完全混乱

Symmetric cryptography 还存在一个问题:在互联网上,每两个人之间需要共享一个密钥进行通信,那么需要极多的密钥才能让整个互联网正常工作。

CAN304 W2的更多相关文章

  1. python爬虫之採集——360联想词W2版本号

    http://blog.csdn.net/recsysml/article/details/30541197,我的这个博文介绍了对应的简单的方法做一个联想词的爬虫,并且还承诺了下面优化: 下一版本号的 ...

  2. 有两艘船需要装运的n箱货物,第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱i的重量,且w1+w2+……+wn<=c1+c2

    (1) 问题描述:        有两艘船和需要装运的n个货箱,第一艘船的载重量是c1,第二艘船的载重量是c2,wi是货箱的质量,且w1+w2+...+wn <= c1+c2. 希望确定是否有一 ...

  3. Warning[w2]: Symbol ?P…

    屏蔽的方法: 一.找到$PROJ_DIR$\..\..\..\Tools\CC2530DB\f8w2530.xcl位置 二.找到f8w2530.xcl 三.打开f8w2530.xcl,注释D?PBAN ...

  4. CS131&Cousera图像处理学习笔记 - L4&W2滤波和卷积

    cs131: http://vision.stanford.edu/teaching/cs131_fall1617/ coursera: https://www.coursera.org/learn/ ...

  5. hdu 1171 有num1个w1 , num2个w2 ……. (母函数)

    输入n,代表学院里面有n种设备,并且在下面输入n行,每一行输入v,m代表设备的价格为v,设备的数量是m.然后要求把这些设备的总价值分摊,尽量平分,使其总价值接近相等,最好是相等 比如样例二(1+X10 ...

  6. 【翻译】MongoDB指南/CRUD操作(三)

    [原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...

  7. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  8. OpenCV人脸识别LBPH算法源码分析

    1 背景及理论基础 人脸识别是指将一个需要识别的人脸和人脸库中的某个人脸对应起来(类似于指纹识别),目的是完成识别功能,该术语需要和人脸检测进行区分,人脸检测是在一张图片中把人脸定位出来,完成的是搜寻 ...

  9. JavaWeb——Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...

  10. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

随机推荐

  1. 解决ERROR 1231 (42000): Variable 'time_zone' can't

    MySQL根据配置文件会限制Server接受的数据包大小.有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败.(比方说导入数据库,数据表) mysql 数据 ...

  2. 在 Mac/Windows 系统中使用 Laradock 搭建基于 Docker 的 Laravel 开发环境

    Laradock 是 Docker 提供的完整 PHP 本地开发环境的一个镜像,任何环境下都可以安装 Docker来运行此开发环境,墙裂安利 简介 Laradock 是为 Docker 提供的完整 P ...

  3. 云服务器下如何部署Django项目详细操作步骤

    前期本人完成了"编写你的第一个 Django 应用程序",有了一个简单的项目代码,在本地window系统自测没问题了,接下来就想办法部署到服务器上,可以通过公网访问我们的Djang ...

  4. VMware网络虚拟化介绍(之一)

    2014年5月,在我加入VMware三个月之后,我涂鸦了一篇<扒一扒SDN的那些事儿>,当时放言如果阅读量过百就写续篇.后来果然阅读量没过百,也就80多的样子,其中好几份还是我自恋地进去查 ...

  5. 非常实用的aix 6.1系统安装的教程

    今年六月,我们公司出现了一次非常严重的数据丢失的事故.生产服务器崩溃导致所有的业务都陷于停滞,而且由于涉及到公司机密又无法贸然到数据恢复公司进行恢复,可是自己又无法解决.权衡利弊还是决定找一家有保密资 ...

  6. 响应式编程之Project Reactor

    Project Reactor作为响应式编程范式的核心实现框架,严格遵循Reactive Streams规范体系,其架构设计完整包含了规范定义的四个核心组件:Publisher(数据源).Subscr ...

  7. 【SpringCloud】SpringCloud config分布式配置中心

    SpringCloud config分布式配置中心 概述 分布式系统面临的---配置问题 微服务意味着要将单体应用中的业务拆分成一个个子服务 ,每个服务的粒度相对较小,因此系统中会出现大量的服务.由于 ...

  8. 如何学习SLAM(超级全面)

    如何学习SLAM(超级全面) 由于SLAM是一个错综复杂的研究领域,涉及到非常多的关键技术.这里先讲讲学习方法论,然后对一些关键性概念(包括SLAM.ROS.SLAM移动机器人)进行分析,最后给出典型 ...

  9. java学习-4-核心类:字符串

    实际上字符串String内部是通过一个char[]数组表示的.因此 String s = new String(new char[] {'h','e','l','l','o'}; 和 String s ...

  10. MCP (Model Context Protocol)初体验:企业数据与大模型融合初探

    简介 模型上下文协议(Model Context Protocol,简称MCP)是一种创新的开放标准协议,旨在解决大语言模型(LLM)与外部数据和工具之间的连接问题.它为AI应用提供了一种统一.标准化 ...