Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >古典密码学概述

古典密码学概述

作者头像
hotarugali
发布于 2022-03-01 07:03:23
发布于 2022-03-01 07:03:23
2K00
代码可运行
举报
运行总次数:0
代码可运行

1. 隐写术 Steganography

隐写术是指首先用传统加密算法对数据进行加密,然后用某种方法将加密后的数据修改为一个伪装文本。

2. 替换密码 Substitution cipher

对数据中的每个字符用另一个字符进行替换。

  • 替换密码依赖与固定的替换结构
  • 对于字母表中的每一个字母的替换都是固定的

【注】

  1. 一次替换一个字符显然会在密文中留下太多的明文结构
  2. 如果已知明文的性质/结构,则可以通过统计攻击轻松破解任何替换密码

2.1 单字母单表密码 Monoalphabetic cipher

  • 凯撒密码 Caesar cipher
  1. 密钥 k \in \{0,1,\cdots,25\},字母表\{a,b,\cdots,z\} 与集合 \{0,1,\cdots,25\} 对应。
  • 明文空间 = 密文空间 = \Sigma^+(其中\Sigma 为字母表\{a,b,\cdots,z\}
  • 密钥空间 = 26
  1. 设密钥为 k=3,明文为 m=are you ready,密文为 c。则:
  • 加密

\begin{array}{c} c_i = Enc(m_i,k) = (m_i+3) \,\, mod \,\, 26 \end{array}

最终加密结果:

\begin{array}{c} c = DUH \ BRX \ UHDGB \end{array}

  • 解密

\begin{array}{c} m_i = Dec(c_i,k) = (c_i-3) \,\, mod \,\, 26 \end{array}

最终解密结果:

\begin{array}{c} m = are \ you \ ready \end{array}

统计攻击方法

  • 原理:令 p_i指示在正常的英文内容中第 i 个字符出现的频率。则有统计公式:

\begin{array}{c} \sum_{i=0}^{25} p_i^2 \approx 0.065 \end{array}

  • 方法:
  1. 定义

\begin{array}{c} I_j = \sum_{i=0}^{25} p_i \cdot q_{i+j} \end{array}

其中,p_i、q_{i+j}分别是对应明文字母表第 i 个字符的频率、密文字符表中第i+j个字符的频率。

  1. 计算 \in \{0,1,\cdots,25\} 对应的 I_j的值。
  2. 选择 I_j​ 值接近 0.065 的 j 值输出,这些 j值很可能是密钥 k
  3. 对于每一个可能的 j 值,计算解密后的原文,看是否有实际意义,有则说明该 j 值即密钥,无则说明不是。
  • Mixed alphabetic cipher 字母表\{a,b,\cdots,z\} 到字母表\{A,B,\cdots,Z\}的映射是一个置换,每个小写字母(代表明文)分别映射到一个唯一的大写字母(表示密文)。
  1. 密钥空间 = 26!
  2. 每个字母的映射是固定的
  3. 已知语言中单个字母的概率分布
  • 摩斯码 Morse code 每个字母映射为一系列点和短横线。

国际摩斯码

  1. 一条短横线等于三个点。
  2. 一个字母对应的系列点和短横线间的空格间隔等于一个点长度
  3. 两个相邻字母间的空格间隔等于三个点的长度
  4. 两个单词间的空格间隔等于七个点的长度

2.2 单字母多表密码 Polyalphabetic cipher

根据密钥中的元素,替换规则从一个字母位置到下一个字母位置会发生改变。相同的明文字符可以对应不同的密文字符。

  • 维吉尼亚密码
  1. 给定一定长度密钥,重复密钥直至密钥流和明文长度相同。
  2. 加密

\begin{array}{c} c_i = (m_i + k_{i \,\, mod \,\, l}) \,\, mod \,\, 26 \end{array}

  1. 解密

\begin{array}{c} m_i = (c_i - k_{i \ mod \ l}) \ mod \ 26 \end{array}

  1. 根据加解密公式可以构造出表格法: 假如明文为 asimpleexamplea simple exampleasimpleexample,密钥为 battistabattistabattista,则表格法加密过程为:
  • 生成密钥流与明文字符一一对应:
  • 参照表格(Tabula recta)计算密文。其中,明文字符对应行索引,密钥字符对应列索引:
  • 最终计算得到的密文为:
  • 解密过程就是加密的逆过程。根据密钥字符对应的列,寻找密文字符,则密文字符在表格中对应的行索引字符即明文字符。
  • 一次性密码本 OTP(One-time pad) OTP 是唯一一个达到完美加密的加密系统,无法被攻破。

要求

  1. OTP 的安全性完全取决于密钥的随机性,即密钥必须是随机产生的。
  2. 密钥长度必须大于等于明文长度。
  3. 密钥只能使用一次,不能重复使用。
  4. 密钥必须完全保密。

示例 比如要加密的消息为「This is an example」,用于加密的密钥(一次性密码本)为「MASKL NSFLD FKJPQ」。

  1. 将字母表\{a,b,\cdots,z\} 映射到数字集合\{0,1,\cdots,25\}。得到:
  • This is an example → 19 7 8 18 8 18 0 13 4 23 0 12 15 11 4
  • MASKL NSFLD FKJPQ → 12 0 18 10 11 13 18 5 11 3 5 10 9 15 16
  1. 二者依序相加并模 26 得到密文消息如下:
  • 5 7 0 2 19 5 18 18 15 0 5 22 24 0 20 → FHACTFSSPAFWYAU
  1. 解密即反向操作即可。

2.3 多字母单表密码 Multiple letter cipher

  • 波雷费密码 Playfair cipher Playfair 密码是首种双字母替换密码。

原理

  1. 选取一个 keyword 作为密钥,去除密钥中重复出现的字母,将密钥的字母逐个从左到右,从上到下加入 5 \times 5的矩阵中,剩下的空间将未加入的英文字母依照a-z顺序加入,将字母将 IJ视为同一字符(或将 Q去除)。
  2. 将要加密的明文分成两个一组。若组内的字母相同,将X(或Q)插入两字母之间,重新分组(例如 HELLO 将分成 HE LX LO)。若剩下一个字,也加入X字。
  3. 在每组中,找出两个字母在矩阵中的地方。
  • 若两个字母不在同一直行或同一横列,在矩阵中找出另外两个字母,使这四个字母成为一个长方形的四个角(读取按行对应,即两个字母分别依次对应同行的那个字母)
  • 若两个字母在同一横行,取这两个字母右方的字母(若字母在最右方则取最左方的字母)。
  • 若两个字母在同一直列,取这两个字母下方的字母(若字母在最下方则取最上方的字母)。
  1. 新找到的两个字母就是原本的两个字母加密的结果。
  • 希尔密码 Hill cipher 希尔密码是运用基本矩阵论原理的替换密码,一次性替换三字母。

原理

  1. 将字母表 \{a,b,\cdots,z\} 映射到数字集合 \{0,1,\cdots,25\}
  2. 加密密钥是一个 3 \times 3的可逆矩阵(如果不可逆则无法解密):

\begin{array}{c} K = \left[ \begin{matrix} k_{11} & k_{12} & k_{13} \\ k_{21} & k_{22} & k_{23} \\ k_{31} & k_{31} & k_{33} \\ \end{matrix} \right] \end{array}

  1. 明文被排列为以下格式:

\begin{array}{c} M = \left[ \begin{matrix} m_1 \\ m_2 \\ m_3 \\ \end{matrix} \right] \end{array}

  1. 加密公式为:

\begin{array}{c} C = \left[ \begin{matrix} c_1 \\ c_2 \\ c_3 \\ \end{matrix} \right] = (K \cdot M) \ mod \ 26 = (\left[ \begin{matrix} k_{11} & k_{12} & k_{13} \\ k_{21} & k_{22} & k_{23} \\ k_{31} & k_{31} & k_{33} \\ \end{matrix} \right] \cdot \left[ \begin{matrix} m_1 \\ m_2 \\ m_3 \\ \end{matrix} \right]) \ mod \ 26 \end{array}

  1. 解密公式为:

\begin{array}{c} M = (K^{-1}C) \ mod \ 26 = (K^{-1}KM) \ mod \ 26 = M \end{array}

3. 置换密码 Transposition cipher

对数据中的字符重新排列,但不改变它们本身。

  • 篱笆密码法 Rail Fence cipher 明文由上至下顺序写上,当到达最低部时,再回头向上,一直重复直至整篇明文写完为止。然后,再往右顺序抄写一次,即得到密文。

示例

  1. 明文:WE ARE DISCOVERED. FLEE AT ONCE
  2. 篱笆密码法:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 W . . . E . . . C . . . R . . . L . . . T . . . E
. E . R . D . S . O . E . E . F . E . A . O . C .
. . A . . . I . . . V . . . D . . . E . . . N . .
  1. 密文:WECRL TEERD SOEEF EAOCA IVDEN
  • Column Transposition cipher 将明文按行顺序排列,超过行长则另起一行。密钥为一个置换,密钥长度决定行的长度。根据密钥指定的置换顺序,一列一列读取字符组在一起得到密文。

示例

  1. 密钥:4 3 1 2 5 6 7
  2. 明文:attack postponed until two am
  3. 置换:
  1. 密文:TTNAAPTMTSUOAODWCOIXKNLYPETZ

4. 转轮密码机 Rotor machine

属于单字母多表密码加密,每次转动输出一个密文后,转轮机内部布线发生改变,即改变了明文字符和密文字符之间的映射关系。

  • German Enigma
  • Allied Hagelin
  • Japanese Purple
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
LV.1
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验