密码学

古典密码学

了解古典密码的历史、类型及其解密方法

学习时间: 50分钟
挑战数量: 3个
难度级别: 初级

课程概述

古典密码是密码学的起源,它们构成了现代密码学的基础。尽管现代密码学已经远远超越了古典密码的安全性,但理解古典密码对于入门CTF密码学挑战至关重要。本课程将介绍最重要的几种古典密码,包括它们的工作原理、弱点以及破解方法。

古典密码的历史

古典密码的历史可以追溯到数千年前。以下是一些关键的历史时刻:

  • 公元前500年左右:古希腊人使用"密码棒"(scytale)进行加密通信
  • 公元前50年左右:凯撒密码被罗马帝国凯撒大帝用于军事通信
  • 9世纪:阿拉伯学者开发了频率分析,用于破解替换密码
  • 16世纪:维热纳尔密码的发明,标志着多表替换密码的出现
  • 19-20世纪:机械密码设备出现,如恩尼格玛(Enigma)机

古典密码的分类

古典密码通常分为两大类:

  1. 替换密码(Substitution Ciphers):将明文中的每个字符替换为其他字符
  2. 置换密码(Transposition Ciphers):保留明文字符,但改变它们的位置

常见的替换密码

1. 凯撒密码(Caesar Cipher)

凯撒密码是最简单的替换密码之一,它通过将字母表中的每个字母向右(或向左)移动固定位数来实现加密。

例子:凯撒密码(偏移量为3)

明文:HELLO

密文:KHOOR

对应关系:A → D, B → E, C → F, ... , Z → C

破解方法

  • 暴力破解(尝试所有可能的偏移量,共26种)
  • 频率分析(利用语言中字母出现频率的规律)

2. 单表替换密码(Monoalphabetic Substitution)

单表替换密码使用混乱的字母表进行替换,而不是简单地移动字母。

例子:单表替换密码

明文字母表:ABCDEFGHIJKLMNOPQRSTUVWXYZ

密文字母表:QWERTYUIOPASDFGHJKLZXCVBNM

明文:HELLO

密文:JTCCG

破解方法

  • 频率分析(分析密文中字母出现频率)
  • 模式识别(特别是短词的模式,如THE, AND, IS等)

3. 维热纳尔密码(Vigenere Cipher)

维热纳尔密码是一种多表替换密码,使用一个关键词循环生成多个凯撒密码表,大大增加了密码的复杂性。

例子:维热纳尔密码(密钥为"KEY")

明文:HELLO

密钥:KEYKE(循环重复)

密文:RIJVS

H(7) + K(10) = R(17)

E(4) + E(4) = I(8)

L(11) + Y(24) = J(9)

L(11) + K(10) = V(21)

O(14) + E(4) = S(18)

破解方法

  • 卡西斯基测试(Kasiski examination)找出密钥长度
  • 频率分析(对每个密钥位置分别进行)
  • 索引符合测试(Index of Coincidence)

常见的置换密码

1. 栅栏密码(Rail Fence Cipher)

栅栏密码将明文按对角线方式写在固定数量的"栏"上,然后按行读出。

例子:栅栏密码(3栏)

明文:HELLOWORLD

排列方式:

H . . . O . . . L .
. E . L . W . R . D
. . L . . . O . . .

密文:HOLELWRDLO

破解方法

  • 尝试不同的栏数(通常不超过10)
  • 检查生成的明文是否有意义

2. 列置换密码(Columnar Transposition)

列置换密码将明文写入一个矩阵,然后根据密钥指定的顺序读出各列。

例子:列置换密码(密钥为"KEY")

明文:HELLOWORLD

密钥:KEY

按字母顺序,密钥位置为:2-1-3

排列明文:

K E Y
2 1 3
----- 
H E L
L O W
O R L
D

按列读出,顺序为E列、K列、Y列:

密文:EORDHLOLWL

破解方法

  • 尝试不同的列数和排列顺序
  • 分析字母频率特点
  • 使用计算机程序穷举可能的排列

在CTF中应对古典密码

在CTF比赛中,古典密码挑战通常要求参赛者:

  1. 识别密码类型:通过线索、密文特点或加密描述来识别使用的密码类型
  2. 确定密钥:找出加密使用的密钥(如凯撒密码的位移量)
  3. 解密密文:应用适当的解密算法获取明文

解决这些挑战的工具和技巧:

  • 在线解密工具(如CyberChef、dCode)
  • 密码分析脚本(使用Python等语言编写)
  • 频率分析工具
  • 观察密文模式、重复和特征

实用技巧:古典密码分析

分析和破解古典密码的一般步骤:

  1. 观察密文特点:查看字符集(是否仅包含字母、数字或特殊符号?)
  2. 计算密文长度:长度可能暗示密钥长度或加密方法
  3. 统计字符频率:比较与自然语言字母频率的差异
  4. 寻找重复模式:重复序列可能暗示周期性密钥
  5. 分析已知信息:利用已知的明文部分(如标志性开头或结尾)
  6. 尝试常见的密码类型:从简单到复杂逐一尝试
密码类型 特点 破解难度 常用工具
凯撒密码 字母频率整体移动 简单 CyberChef, dCode
单表替换 保留字母频率特征 中等 Quipqiup, 频率分析器
维热纳尔密码 周期性重复模式 中高 Vigenere Solver, CrypTool
栅栏密码 字母按固定模式分布 中等 RailFence Decoder
列置换密码 保留所有原始字母 中高 Columnar Transposition Solver

相关挑战

凯撒密码破解

简单

尝试破解一组凯撒密码,使用暴力破解或频率分析方法找出正确的偏移量。

维热纳尔密码分析

中等

分析给定的维热纳尔密文,找出密钥长度并使用频率分析破解密码。

古典密码混合挑战

困难

识别并破解一系列使用不同古典密码加密的密文,逐层解开谜题。