标题: 无加密的机密性:Chaffing and Winnowing原理和C#实验仿真 [打印本页] 作者: 来自云龙湖轮廓分明的月亮 时间: 2024-11-24 01:17 标题: 无加密的机密性:Chaffing and Winnowing原理和C#实验仿真 近来在Crypto 2023上看到一篇有趣的文章[1],其旨在一个存在拥有所有密钥并知道所有消息的“独裁者”的信道中,通过安排与常规密文无法区分的隐蔽的“变形”消息来进行机密通信的方法——变形署名,但由于本人技术水平有限无法完整实现整个系统。而当阅读到其中的一个技术分支——Chaffing and Winnowing时惊喜地发现其实现方法之巧妙,又恰好在图灵班的密码学课程中学到了相关的Diffie-Hellman密钥交换协议和消息验证码MAC等知识,于是选取这篇上世纪的论文[2]来进行评论和仿真实验。
(是的你没看错,这是我在学校写的某低水平评论论文,觉得方法比较新颖巧妙,于是分享出来)
择要: 本文先容了 Rivest 提出的 Chaffing and Winnowing 技术,该技术通过在消息中混入无关信息 (chaff) 并添加认证码 (MAC) 来实现机密性,即使在拥有所有加密密钥的“独裁者”信道中进行通信也能保证消息安全。文章具体阐述了该技术的原理、应用场景、潜在威胁以及将来研究方向,并通过实验仿真实现了整个技术流程。
一、简介
Rivest为我们先容了一种新技术Chaffing and Winnowing——原意是指从谷粒中分离谷壳的过程,它不进行传统意义上的加密,而是将消息(wheat)分块并作认证,混入无关信息(chaff)之后再进行通信。
该项技术可以说是变形署名[1]的奠基之作,二者同样考虑一个问题:若独裁者拥有一个“后门”可以或许恢复密钥来对消息进行解密,那么怎样在这样的信道上为消息提供机密性。Rivest说“像往常一样,关于规范技术的政策辩论最终会被技术创新所淘汰。试图通过规范加密来规范保密性,关闭了一扇门,却留下了另外两扇门(隐写术和Chaffing and Winnowing).”后者与前者不同,隐写术[3]注重于在较大的、看似普通的信息(如图片)中隐蔽机密,使得在算法不公开的前提下,一个PPT对手无法有用区分机密内容和普通内容。显然这样的机密性是由算法保密性提供,并不符合卡尔霍夫原则[4],即“一个密码系统的安全性不应依赖于算法的秘密性,而应依赖于密钥的秘密性”。
而在Chaffing and Winnowing中,消息机密性的保证被归因到MAC算法的认证性上,即在适应性选择明文攻击下具有存在不可伪造性[5]。对手无法怀疑两种数据包的存在,不具有机密认证则亦无法区分它们,即使原消息不受任何加密。 二、技术概要
试想通讯两边之间存在一个发起中间人攻击的主动对手,可以或许用自己的密钥生成MAC并嵌入有害信息,这对于通讯两边担当消息没有影响。此时对手拥有通讯的全文和自己的密钥,则他可以对通信两边进行诬陷:指定其通讯内容为有害信息而他们无法辩解。一方面,由于可否认加密的存在,他们可被认定为提供虚假无害的消息密钥;另一方面,通讯两边根本没有机密性需求,也没有使用Chaffing and Winnowing技术,他们本身就没有密钥,对手嵌入的信息在通讯两边的可忽视区内。
4. 怎样协商一个私钥
var privateKey = client.DeriveKeyMaterial(CngKey.Import(otherPublicKey, CngKeyBlobFormat.EccPublicBlob));
复制代码
2. 实现一个AONT变换
这里接纳原作者的简朴变换:将数据按BLOCK_SIZE分块,生成与块等大的随机生成的密钥块key,将每个数据块与key逐比特异或得到效果,再将key与效果做异或储存在效果的最后一块之后:
[code]public static readonly int BLOCK_SIZE = 16; public static byte[] Transform(byte[] data){ int blocks= (data.Length+BLOCK_SIZE-1)/BLOCK_SIZE; byte[] result = new byte[(blocks+1)*BLOCK_SIZE];//reserve one block for the hash byte[] key= new byte[BLOCK_SIZE]; RandomNumberGenerator.Fill(key); Console.WriteLine($"Key: {string.Join(',',key)}"); for(int i=0;i