1.1 密码学概述:目标、威胁与基本概念


1.1 密码学概述:目标、威胁与基本概念

本节摘要:密码学是研究在存在敌手的环境中实现信息机密性、完整性、认证性与不可否认性的学科。本节立起全书的坐标系:四大安全目标、明文/密文/密钥等基本词汇、攻击者能力模型,以及柯克霍夫原则这条从十九世纪沿用至今的设计底线。后续所有章节的算法,都是在为这四个目标提供不同时代的技术答案。

一、从一封被截获的军令说起

想象你是一名古代将领,需要把"三日拂晓渡河"的命令送到下游的副将手里。信使要走几十里山路,途中可能被俘、被买通、被掉包。你面临的问题不是"信能不能送到",而是"信被别人看到或改动之后,我方会不会因此送命"。这个问题拆开来其实是四件事:命令内容不能被读懂(机密);命令在途中一个字都不能被改(完整性);副将要能确认命令确实出自你而不是敌军伪造(认证);事后你不能抵赖说命令不是你下的(不可否认)。

这四件事,就是现代密码学常说的四大安全目标。值得强调的是,"加密"只直接服务其中的第一件——密码学的版图远比"把字变成乱码"大。哈希函数管完整性,消息认证码与签名管认证,数字签名再补上不可否认性; encryption 只是这栋大厦里最先建成的那个房间。本书后续章节的展开顺序,大致就是这四个目标被逐一"拿下"的历史顺序。

图:密码学四大安全目标与敌手模型

图:密码学四大安全目标与敌手模型

二、基本词汇:一套贯穿全书的语言

把四个目标立起来之后,需要一套精确的词汇。明文(plaintext)是待保护的原貌信息;密文(ciphertext)是明文经过变换后的产物;决定这场变换的私密参数叫密钥(key);从明文到密文的过程叫加密,反向过程叫解密;算法与密钥使用方式的总体设计称为密码体制(cryptosystem)。这些词今天听来平平无奇,但它们划出的边界很重要:分析密码的人研究"如何在不掌握密钥的情况下从密文恢复明文",这叫密码分析;密码学与密码分析互为攻防两面,共同构成密码学这个学科的完整外延——事实上,本册的历史主线正是"分析逼出设计"的历史。

还有一个绕不开的词是敌手模型:我们假定敌手有多强的能力?仅能被动窃听,还是能主动篡改、伪造、重放消息?能拿到多少"已知明文-密文对",甚至能随心所欲地让加密设备替他加密(选择明文攻击)?敌手模型定得越苛刻,密码就越难设计,但证明出来的安全性也越让人放心。现代密码学普遍以"已知算法、已知部分明密文对、可选择输入"的强敌手为默认假设——本书第 7 章讨论攻击类型时会回到这条线上。

下面的 Python 片段把"体制 = 算法 + 密钥"的概念具象成一个最小的玩具模型,跑一遍即可看清三个要素如何各司其职:

# 玩具保密系统:说明算法、密钥、明文、密文的关系(非真实加密) ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" def shift_char(ch, k): """把单个字母沿字母表移动 k 位,非字母原样返回""" if ch.upper() not in ALPHABET: return ch base = ord('A') if ch.isupper() else ord('a') return chr((ord(ch) - base + k) % 26 + base) def encrypt(plaintext, key): """加密:算法是'逐字母移位',密钥是移位量""" return "".join(shift_char(c, key) for c in plaintext) def decrypt(ciphertext, key): return "".join(shift_char(c, -key) for c in ciphertext) msg = "ATTACK AT DAWN" key = 3 # 密钥:移位量 ct = encrypt(msg, key) # 密文:DWWDFN DW GDZQ print(ct) # -> DWWDFN DW GDZQ print(decrypt(ct, key)) # -> ATTACK AT DAWN

运行后可以看到:算法(移位规则)是公开写在这里的,真正需要保密的只有 key 这个整数。这正是下一条原则要说的内容。

三、柯克霍夫原则:算法可以公开,密钥不能丢

1883 年,荷兰语言学家奥古斯特·柯克霍夫在《军事密码学》中提出一组军事密码设计要求,其中流传最广的一条是:**即使密码体制除密钥外的所有细节都被敌手知晓,体制仍应保持安全。**这就是柯克霍夫原则(Kerckhoffs's principle)。

这条原则在今天看来近乎常识,但它否定的是一种直到今天都阴魂不散的做法——"隐蔽式安全"(security by obscurity):指望靠藏住算法来保安全。历史上"自制加密算法、算法保密"而翻车的案例比比皆是,因为自制的变换几乎必然藏着设计者自己看不见的统计漏洞;而公开的算法经得起全世界分析者的反复捶打,被捶打过还没倒下的,才配继续用。现代主流算法——AES、SHA-256、RSA——全部是公开的,任何人都能下载它们的完整规范,它们的可靠性恰恰建立在"公开却无人攻破"之上。

理解柯克霍夫原则,也就理解了为什么本书后面把"密钥管理"当作一等公民来写:算法公开之后,系统的全部安全性都被压到了密钥这一根细线上。密钥怎么生成(必须是随机的)、怎么分发(第 4 章的公钥革命就是为了解决这件事)、怎么轮换与销毁(第 3 章密钥管理一节专门展开),任何一环松掉,再强的算法也形同虚设。

四、本节在全书中的位置

这一节给出的坐标系将使用七次:古典密码(第 1 章)用混淆字母追求机密性,最终败给统计;机械密码(第 2 章)把替换复杂度推到极致,仍然败给数学与工程;香农(第 2 章)第一次回答"机密性究竟能不能被严格证明";DES 与 AES(第 3 章)把机密性做成可量产的工业标准;公钥革命(第 4 章)补上机密性之外最难啃的密钥分发问题;哈希与签名(第 4、5 章)把完整性与认证性收入囊中;TLS(第 6 章)把四目标组装成日常可用的协议;后量子(第 7 章)则在算总账——量子时代来临之际,四个目标分别需要换什么零件。

💡 关键直觉:把密码学想成一套"在敌手在场的前提下仍能成立的通信纪律"。加密只是纪律里最老的那一条;哈希、认证码、签名、证书,都是为了让这套纪律在更狡猾的敌手面前继续成立。

本节要点回顾

  • 四大目标:机密性、完整性、认证性、不可否认性,加密只覆盖其中之一,其余由哈希、认证码与签名承担;
  • 基本词汇:明文、密文、密钥、加密、解密、密码体制,这套语言贯穿全书;
  • 敌手模型:现代设计默认敌手知晓算法、可窃听甚至选择输入,安全性是针对特定敌手能力的陈述;
  • 柯克霍夫原则:体制的安全只能依赖密钥的保密,算法必须假定公开;
  • 推论:密钥的生成、分发、轮换、销毁是工程实践中最脆弱也最重要的环节。

下一节我们把镜头拉远,在动手拆解具体密码之前,先看清古典时代都发明过哪些保密手段,以及密码学与隐写术的分野在哪里。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U