加密标准(共6篇)
加密标准 篇1
2003年3月发布的H.264是目前最新的视频编码标准。它采用了1/8精度的运动估计、4×4整数变换、CAVLC和CABAC等新技术, 使得压缩效率和图像播放质量有了显著提高。与以往标准相比, 在相同率失真的条件下, 编码效率提高了50%左右。H.264应用范围非常广阔, 包括视频会议、可视电话、会议电视等即时通信, 以及数字电视广播、数字存储、流媒体等方面。
随着视频应用的日益广泛, 视频的安全性变得越来越重要。基于以往的标准, 人们研究了许多加密算法:有用传统密码技术进行全部加密的方法, 如DES算法、CSC算法和VEA算法, 这类算法虽然有较高的安全性并且不改变压缩比, 但是计算复杂度很高;有对DCT系数进行加密的方法, 如分段置乱算法, 这类算法虽然有较低的计算复杂度, 但是安全性低于全部加密的算法, 压缩比也有所改变;有在熵编码过程中进行加密的方法, 如多状态索引方法, 这类算法虽然计算复杂度低, 对压缩比的影响较小, 但在已知明文攻击情况下是不安全的。上述方法各有优缺点, 而且大多针对MPEG标准, 因此研究适合H.264特点的安全加密技术成为目前研究的热点。
针对现有视频加密算法的不足, 本文提出一种基于H.264的可感知加密算法。
1 加密数据元素的分析与选取
对H.264编码宏块语义层进行分析, 决定提取帧内预测模式字 (Intra Prediction Mode) 、运动向量差值 (Motion Vector Differ_ence) 和残差系数 (Residual Coefficient) 三类定长语法元素 (fix-length code) 进行加密操作[1]。
1.1 帧内预测模式字
根据每个宏块所属片组的不同, 每一个宏块都有几种编码预测模式。但帧内预测编码是所有片组编码类型中都支持的。对亮度像素块而言, 存在有Intra_4×4, Intra_8×8、Intra_16×16三种预测模式。Intra_4×4模式下有9种预测模式, 适用于对图像细节部分进行编码, Intra_16×16有4种预测模式, 适用于对平坦区域进行图像编码[2]。
采用Intra_4×4的编码模式字进行加密操作。每一个4×4块都是通过上方和左方像素预测而来, 如图1所示, a-p为待预测像素, 它利用相邻块中已经解码的A-Q像素来进行预测。对每一个4×4块, 总共有9种模式供选择[2], 其中除了DC模式, 另外8种预测模式的方向也在图1中。
图1 Intra_4×4预测示意图
Intra_4×4的编码预测模式总共有9种预测模式, 至少需要4个bit位来进行编码。在H.264的标准中, 利用一个“prev_Intra_4×4_pred_mode”字段来排除一种预测方式, 用另外3个bit位来表示余下的8种预测模式。因此, 只对后3个bit位进行加密扰乱, 这样的加密过程中, 不会影响到其他字段, 也不会产生额外的码流。
1.2 运动向量差值
如图2所示, 在P帧或B帧中, 每个宏块 (16×16像素) 可以有4种方式来进行分割:16×16、8×16、16×8、8×8。如图2 (d) 是采用8×8模式, 分为4个子宏块 (8×8像素) 。每个字宏块可以进一步进行分割:8×8、4×8、8×4、4×4。
每一个分区或者子宏块都有一个单独的运动向量MV (Motion Vector) , 用于引用前面参考帧的对应区域来对当前块进行预测编码。每个预测区的MV都需要相当数目的比特位来进行编码。为了进一步减少比特数, 可以利用邻近的MV之间的相关性进行预测编码。后一个MV可由前面已经编码的MV预测得到, 只需要对它们的差值MVD (Motion Vector Difference) 进行编码。在H.264中, MVD值是采用指数哥伦布 (Exp-Golomb) 进行编码的, 这是一种变长编码[3]。
指数哥伦布编码由前缀和后缀构成, 前缀为M个0后面跟一个1, 后缀为M bit的INFO, 其码形为:[M zero]1[INFO]。其中, M=floor (log2 (Code Num-1) ) 。若MVD<0, CodeNum=2|MVD|-1, INFO的大小为Code Num-2M。用加密函数来对INFO进行加密:y=Encrypt- (INFO) , 其中y为加密后的密文。
本文只对MVD的符号位进行加密, 对于每一个MVD值, 只需要对一个bit位进行加密操作。
1.3 残差系数
在H.264中, 残差块系数通过CAVLC和CABAC进行编码[4]。在进行CAVLC编码的过程中, 涉及到以下几个语义字段[2]:非零系数数目 (Total Coeffs) 、拖尾系数数目 (Trailing Ones) 、非零系数幅值 (Level) 以及最后一个非零系数前零的个数 (Total Zero) 和每个非零系数前零的个数 (Run Before) 。经过分析, 只有Trailing Ones和Level的符号位是属于定长字段[6], 因此提取这两个字段的符号位进行加密操作。如图3所示。
2 算法设计
分别引入三个不同的控制参数P1、P1、P3对预测模式字IPM、运动向量MVD和残差系数Residual Coefficien的加密强度进行控制[1], 具体方案为:以P1、P2的概率分别对IPM、MVD进行加密, 当P1、P2从0到1进行变化时, 相应地进行不加密到完全加密;以P3对Residual Coefficients系数符号位进行不加密到完全加密控制。
下面是算法的具体伪代码描述:
3 仿真结果与分析
3.1 实验环境
实验测试条件:H.264/AVC标准, JM10.2版本, 以IPPP方式进行编码, I帧刷新率为10, 帧率为30 F/s, 2GB内存, Intel T5670处理器, 并用VS2008完成对JM10.2代码的调试。实验中采用CIF格式的352288的foreman作为视频序列。
3.2 加密效果分析
单独加密IPM字段, 只是对亮度信息进行加密, 如图4中人脸和轮廓信息清晰可见;单独进行MVD加密的过程中, 如图5中, I帧图像完全不受任何影响, B、P帧的I bock也完全不受影响, 关键信息很容易泄露。单独对残差系数进行加密, 如图6, 与IPM一样, 图像的轮廓信息没有很好的隐藏。另外, 从对抗解密攻击能力上来看, 单独对一种加密元素进行分析加密空间更小, 也更容易实施破解。因此, 在视觉安全性要求比较高的场合, 应该联合对所有三种元素进行加密, 从图7可以看到, 随着加密强度不断提高, 视频图像可感知性不断下降, 在最强的加密强度下, 整幅图像完全被扰乱有很高的视觉安全性。各种方汉加密后PSNR值如表1所示。
3.3 安全性分析
在加密方案中, 保持视频格式的语义兼容性, 加密操作并不改变相关字段的长度。攻击者会很自然地通过单独猜解每个字段元素的值来进行Cipher-only Attacks[7]。最简单的方法是进行ECA攻击 (Error Concealment-based Attack) , 就是将所有FLC的值赋值为一个固定值进行破解。同时, 攻击者也可以通过相邻块之间的相关性来单独猜解每个FLC的值, 下面对其复杂性进行分析说明。假设在一个帧数据中所有FLC的数据为N, 加密的概率控制为p, 则在一帧数据中实际进行加密的FLC的数目为p N, 对一帧数据进行去块攻击的难度至少为O ( (CNPN2PN) 。对于每一个符号字段[5], 至少有两个取值 (0和1) , 如果是IPM字, 则有更多的取值可能。如果假设p>100N, 则有2PN>2100, 实际上, 在一个数据帧里面, FLC的数目要远远大于100, 该加密的方案在对抗Cipher_only Attacks攻击还是十分有效的。
3.4 性能分析
一个加密算法的计算复杂度主要取决于它要进行加密的数据量。本文加密的数据量主要包括IPM、MVD和残差系数。在一个宏块中, IPM和MVD符号位, 还有Residual Coefficient的符号位需要加密, 因此, 要加密的数据量同整个视频数据相比, 只占很小的部分。所采用的加密操作也仅仅是对相关的bit位进行“异或”操作, 所需的系统开销极小, 基本上不会对编解码带来影响。
本文研究了一种在H.264编码下进行Perceptual Encryption的方法, 通过对语法元素的分析和编码方式的研究, 选取了IPM、MVD和Residual Coefficient这三种定长字段的元素进行加密。通过引入概率参数来对每种类型的字段加密强度进行控制, 分析加密不同元素所带来的视频加密效果。实验结果表明, 单独加密其中任何一种元素, 都能对图像带来很大的干扰。但要获得很好的安全性, 必须联合加密三种元素。这种加密方案具有很好的安全性和实时性, 而且不会带来额外的码流, 保持了视频的压缩比不变, 并且可以调整不同的加密强度, 适用于各种应用的需求。
摘要:针对多媒体视频传输的安全性与实时性的要求, 提出一种基于H.264感知加密算法的视频加密方案。该方案将视频数据分为VLC (Variable Length Code) 和FLC (Fix-Length Code) 两类, 只选择FLC中对重构图像比较重要的元素进行加密操作。理论分析和仿真结果表明, 该加密方案具有安全性高, 低成本系统开销的特性。
关键词:视频加密,H.264编码标准,感知加密算法,FLC,安全性
参考文献
[1]刘萧.基于H.264编码的视频加密研究[D].杭州:浙江大学计算机科学与技术学院, 2010:18-29.
[2]毕厚杰.新一代视频压缩编码标准:H.264/AVC[M].北京:人民邮电出版社, 2005.
[3]李晓举, 冯战申, 胡友情.基于H.264 CAVLC熵编码的视频加密方案[J].计算机工程与应用, 2009, 45 (34) :114-117.
[4]包先雨, 蒋建国, 袁炜, 等.H.264/AVC标准中基于CABAC的数字视频加密研究[J].通信学报, 2007, 28 (6) :24-29.
[5]QAO L, NAHRSTEDT K.A new algorithm for MPEG videoencryption[C].In:Proceeding of the Frist International Con-ference on Imaging Science, Systems and Technology (CISST’97) , LasVegas, Nevada, 1997:21-29.
[6]LIAN S G, LIU Z, REN Z.Secure advanced video codingbased on selection algorithms[J].IEEE Transactions onConsumer Electronics, 2006, 52 (2) :621-629.
[7]李晓举, 忽海娜, 刘丽.一种基于H.264CABAC的视频加密方案[J].电信科学, 2010, 26 (7) :80-83.
加密标准 篇2
一、Word2003文档加密的方法
方法一:单击文档菜单栏的“工具”—选项—安全性,然后我们可以看见“此文档的文件加密选项”这一项,我们只要按照提示的内容输入密码,确定后再输入一次就可以了。
方法二:上面提到的方法,是不输入密码就无法打开Word文档,如果我们只是不希望别人修改文档的话,还可以将文档设置为是“只读”,在“工具”—选项—安全性中,在“此文档的文件共享选项”下输入密码并确定,这样该文档只有在输入正确密码的情况下,才可以被修改,
www.yjpdf.com
二、Word2007文档加密的方法
方法一:打开文档后,Office按钮—“准备”,这时我们就会看到“加密文档”一项,然后按照提示设置好密码就可以了。
方法二:
1、Office按钮—另存为—Word文档;
2、打开另存为对话框后,选择右下角的“工具”—“常规选项”;
3、打开“常规选项”对话框,设置密码。
三、Word2010文档加密的方法
加密标准 篇3
关键词:AES,Rijndael,分组加密算法,FPGA,轮变换
1. 引言
随着计算机和通信网络的广泛应用,信息的安全性已受到人们的普遍重视。信息安全已不仅仅局限于政治、军事以及外交等领域,而且也与人们的日常生活息息相关。现在密码学理论和技术已得到了迅速发展,它是信息科学和技术中的一个重要研究领域。目前随着密码分析技术的不断发展,超期服役的DES算法已被攻破,DES密钥长度为56位,存在密钥过短的缺陷,3DES是一种由DES衍生出来的算法,虽然增加了密钥长度,但3DES的加密和解密时间消耗较大。Rijndael数据加密算法成为AES算法的标准以来,经过多年来的分析和测试,至今没有发现AES的明显缺点,也没有找到明显的安全漏洞。标准的商品化CPU和DSP无法跟上数据加密算法的计算要求。基于FPGA高度优化的可编程的硬件安全性解决方案提供了并行处理能力,并且可以达到所要求的加密处理性能基准。
2. 算法说明
2.1 算法概要
AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数。每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。由于外部输入的加密密钥K长度有限,所以在算法中要用一个密钥扩展程序(Keyexpansion)把外部密钥K扩展成更长的比特串,以生成各轮的加密和解密密钥。
Rijndael算法由加密、解密和密钥编排三个算法组成。加密算法是把明文经过Nr+1轮变换得到密文,AES具有128比特的分组长度,对于128,192,256位密钥长度的Rijndael算法,Nr分别取10,12,14。密钥编排是对初始密钥进行扩展以产生各轮变换所需要的轮密钥。
2.2 AES密钥调度
密钥调度包括两个部分:密钥扩展和轮密钥选取。密钥扩展是指把Nk比特初始密钥映射为所谓的扩展密钥,而轮密钥选取则是从扩展密钥中选择出Nb比特的轮密钥。
2.3 以加密为例的轮变换
轮变换由字节替代、字节位移、列混合和轮密钥加法4个模块组成。字节代替(ByteSub)变换是一个非线性的字节代替,它在每个状态字上独立地进行运算。代替表(或S盒)是可逆的,且是由两个变换的合成而构造出来的。对于128字节的密钥长度的AES轮变换的字节移位可见图2。
列混合对状态矩阵的列独立进行变换,将状态的列看作是有限域GF(28)上的多项式a(x),与多项式c(x)=03x3+01x2+01x+02相乘(模x4+1)。令b(x)=c(x)×a(x),写成矩阵形式为:
3. AES的FPGA实现
由AES原理可以看出,通过FPGA实现AES算法,各部运算可以分解为最基本的查找和异或。
用伪代码表示的Rijndael加密算法,如提前进行密钥扩展,Rijndael加密算法描述可变为:
本设计是用FPGA实现AES加密/解密。命名为wb_aescomtroller.V文件包含数据输入输出,接口转换,控制;其它的各个模块均以独立的V文件描述,如sbox.V文件描述的是字节替换表模块(Byte Substitution,S-盒)。以下以加密为例,详述其过程。
加密开始时,首先由输入密钥开始密钥扩展,由此也决定将要进行循环的轮数。根据输入密钥长度的不同,进行不同轮数的循环。首先是执行密钥加(RoundKey-Add),之后进行Nr轮的运算(最后一轮没有列混合)。
每一轮的开始首先是轮密钥加(RoundKey-Add),本设计中,用了一个128*8的存储器,在加密模块开始时(即数据输入时)同时开始工作,扩展后的密钥存入寄存器组,通过输入密钥的长度和计数器来决定当前输入的、将要进行轮密钥加的128位密钥。字节替换(Byte-Sub)用查找表的方式实现。列混合(Mix-Col)主要是XTime和xor运算,可以分为最简单的xor运算。明文(plaintext)经过Nr轮的运算,即得到密文(ciphertext)输出。
在ModelsimSE6.0软件仿真平台上,编译project里面的所有V文件,经仿真,把工程上的测试文件test_bench_top加入wave,仿真输出波形,可见图6和图7所示。
因此,结合上图5和图6,可以发现384比特的tmo序列的前面128bits被提取为密文;中间128bits作为明文以及加密输入码;后面的128bits作为密钥。仿真输出后,发现加密后输出码流test_out与ciph一致,从加密码流再经解密的输出码流test_out2与最初输入码流plain一致,即设计输出结果符合整个设计要求,AES算法得以实现,结果正确。
4. 结束语
本文讨论了用FPGA实现AES算法的设计方案,重点详述了AES算法的原理以及FPGA实现步骤。通过用Verilog语言编写实现程序,在ModelSim SE6.0软件平台上进行编译、仿真,使得以Rijndael数据加密算法的AES高级加密标准得到很好的体现。实验结果表明,本设计基于FPGA可编程逻辑器件的实现方法提供了并行处理能力,达到设计所要求的加密处理性能基准。
参考文献
[1]夏宇闻.Verilog数字系统设计教程(第二版)[M].北京航空航天大学出版社,2008.
[2]储奕锋.AES算法的FPGA实现[J].开发研究与设计技术.2007:191-193.
[3]张延伟等.VerilogHDL程序设计实例详解[M].人民邮电出版社,2008.
[4]吴鹏,李开成.基于FPGA的Rijndael算法实现的研究[J].计算机与通信信号.2007(120):46-48.
[5]唐金艺.AES算法FPGA实现分析[J].计算机安全.2008(6):14-20.
[6]苏国强,郑小平等.基于低成本FPGA的AES算法实现[J].甘肃高师学报.2009(14):17-19.
加密标准 篇4
1、打开一个任意的PDF文档;
2、选择菜单栏的“文档”;
3、选择“文档”里的“安全性”一栏;
4、再选择“安全性”里的“显示本文档的安全性设置”一栏
5、这样进入了“文档属性”对话框,用鼠标点击一下“安全性方法”,就会出现一个下拉菜单,然后选择“口令安全性”;
6、这样进入“口令安全性―设置”对话框,这样有二处可供选择:
a:“要求打开文档口令”,如果用鼠标在小框内点击一下,这样就会把它勾上,然后你输入你的密码――确认,这样,当别人点击这个文件时,就会弹出“请输入口令”的对话框,如果不知道密码的人士,是完全看不见里面的内容的。
b:“使用口令来限制文档的打印和编辑以及它的安全性设置”,如果用鼠标在小框内点击一下,这样就会把它勾上,然后你输入你的密码――确认,
这样就给你的当前PDF文件加密了,当别人打开你的这个文件,可以看见其内容,但别人不能修改、打印等等
设置 PDF 的口令(这是来自官方的说明,你可以尝试操作。)
您可以通过设置口令和禁止某些功能(例如,打印和编辑)来限制对 PDF 的访问。
PDF 包含两种口令:“文档打开口令”和“许可口令”。当您设置了“文档打开口令”(也称作“用户”口令)后,用户必须键入您指定的口令才能打开 PDF。 当您设置了“许可口令”(也称作“主”口令)后,收件人无需口令即可打开文档,但其必须键入“许可口令”才能设置或更改受限制的功能。 如果 PDF 同时被这两种口令保护,则使用其中任一口令即可将其打开,但必须使用“许可口令”才能更改受限制的功能。为了更高的安全性,同时设置两种口令较好。
所有 Adobe 产品均强制执行由“许可口令”设置的限制。但是,由于第三方产品可能不支持或忽略这些设置,文档收件人可能会绕过您设置的某些或所有限制。
重要说明: 如果您忘记了口令,将无法从文档恢复口令。 请考虑保留没有口令保护的 PDF 的备份。
请执行以下任一操作:
请单击“任务”工具栏上的“安全”按钮 ,然后选择“删除安全性设置”。 键入您的口令,然后在有关删除安全性的提示中单击“是”。
请在“文档属性”对话框的“安全性”标签中,从“安全性方法”菜单选择“无安全性设置”。
加密标准 篇5
一、AES算法加密过程
AES是旨在取代DES的21世纪加密标准。根据NIST颁布的官方文件, AES算法是一种区块对称密钥加密机制, 它由加密 (解密) 算法和密钥扩展算法两部分组成。加密算法将明文与子密钥进行若干轮迭代, 密钥扩展算法将用户主密钥扩展成若干个子密钥, 扩散的密钥与块数据运算后形成密文, 以抵御攻击。AES算法块分组长度为128位, 密钥长度可为128、192、256位, 扩充后的密钥组数分别为11、13、15组, 轮循环次数分别为11、13、15轮, 每轮循环均使用4组密钥, 每组密钥长度均为32位 (4字节) 。AES加密轮循环:初始轮 (Initial Round) , 转换轮 (Transformation Rounds, 除去初始轮和最终轮外, 转换轮数分别为9、11、13轮, 每轮包括SubBytes、ShiftRows、MixColumns、AddRoundKey) , 最终轮 (Final Round, 没有MixColumns) 。下表列出了块大小、密钥长度、密钥组数与轮循环次数的关系:
现以16字节 (128位) 长度的密钥为例, AES加密操作具体实现代码如下:
从上述代码可以看出, AES加密采取了区块 (分组) 方式, 区块大小为16字节, 区块数据存放在二维数组 (阵列) state[4][4]中, 加密操作全部都是对state[4][4]中的数据进行操作, 操作过程可以分为以下三个阶段:
第一阶段:明文数据准备阶段。在这一阶段, 代码state[r][c] = input[r+4*c]将明文数据各字节input[4]按照下表的方式拷贝到state[4][4]二维数组中:
例如, 假设input[16]={32, 43, f6, a8, 88, 5a, 30, 8d, 31, 31, 98, a2, e0, 37, 07, 34},
则拷贝以后, state[4][4]={32, 88, 31, e0, 43, 5a, 31, 37, f6, 30, 98, 07, a8, 8d, a2, 34}。
第二阶段:加密轮循环阶段。包括初始轮、转换轮和最终轮。初始轮具体操作由代码AddRoundKey (state, w[0]) 实现:
即将经第一阶段排序后的明文数据state[4][4]与第1组密钥进行异或运算, 假如第1组密钥k[0][4][4]={2b, 28, ab, 09, 7e, ae, f7, cf, 15, d2, 15, 4f, 16, a6, 88, 3c}, 那么运算结果如下:
转换轮共有9轮循环, 每轮包括SubBytes (state) 、ShiftRows (state) 、MixColumns (state) 和AddRoundKey (state, w[i]) 。字节替换操作SubBytes (state) 具体代码为:
将state[r][c]作为索引, 取数组sBox[]中的元素赋值给state[r][c]。例如:如果state[0][0]=0x19, sBox[state[0][0]]即为sBox[25], 对应值为0xd4, 实际上即是替换表第1行第9列上的元素, 如此类推。
行字节移位操作将state中第1、2、3、4行上的字节向左 (低位) 移动0、1、2、3个字节, 移出的字节依次放回右边 (高位) 。行字节移位操作方式如下图所示:
列混合变换MixColumns (state) 操作具体代码为:
按照第0、1、2、3列和第0、1、2、3行的顺序, t[r]取每个元素的值作为函数FFmul的参数, 先在函数FFmul中进行有限域乘法和加法运算, 再将结果进行异或运算, 以对state中从state[0][0]至state[3][3]的所有元素进行置换。
函数FFmul先计算参数b (state中的元素) 与0x01、0x02、0x04、0x08相乘的值, 再根据参数a (0x01、0x02、0x03、0x09、0x0b、0x0d、0x0e) 用异或运算求和:
前面的for循环是进行域乘法运算。如果是与0x01相乘, 算法与算术中与1相乘相同, 结果bw[0]即是被乘数b本身;如果是与0x02相乘, 结果bw[1]是将被乘数bw[0]向左位移1位的值;如果是与0x04相乘, 结果bw[2]是将被乘数bw[1]再向左位移1位的值;如果是与0x08相乘, 结果bw[3]是将被乘数bw[2]再向左位移1位的值。为防止结果出现“域溢出”, 如果位移后所得的值大于或等于0x80, 还要与0x1b进行异或运算。后面的for循环是进行域加法运算, 实际上只是异或运算。根据参数a (0x01、0x02、0x03、0x09、0x0b、0x0d和0x0e共七个常数, 加密时用前三个常数, 解密时用后四个常数) 向右位移i位并与0x01位与运算的结果确定是否进行异或运算。假设a为0x02, 即00000010, 当i等于0时, if条件为假, res为0;当i等于1时, if条件为真, res与bw[1]进行异或运算, 即得到与0x02相乘的结果。假设a为0x03, 即00000011, 当i等于0时, if条件为真, res与bw[0]进行异或运算;当i等于1时, if条件仍为真, res再与bw[1]进行异或运算, 两次异或运算得到的值即为与0x03相乘的结果。以此类推, 七个常数与state中的元素相乘和相加运算情况见下表:
转换轮中的AddRoundKey (state, w[i]) 操作与初始轮相同, 只是取下一组 (第2~10组) 密钥与state中的数据进行异或运算。
最终轮包括SubBytes (state) 、ShiftRows (state) 和AddRoundKey (state, w[i]) , 但没有MixColumns (state) 。各模块操作与之前均相同, 只是异或运算所使用的是最后一组密钥, 即第11组密钥k[10][4][4]。
第三阶段:密文数据输出阶段。这是第一阶段的逆过程, 对本块 (组) 16字节明文加密后的数据重新进行排序, 并将结果输出。假设加密后数据为state[4][4]={39, 02, dc, 19, 25, dc, 11, 6a, 84, 09, 85, 0b, 1d, fb, 97, 32}, 那么重新排序后输出结果为input[16]={39, 25, 84, 1d, 02, dc, 09, fb, dc, 11, 85, 97, 19, 6a, 0b, 32}。
二、AES算法解密过程
AES算法解密过程是整个加密过程的逆过程。如果密钥长度为128位, AES对数据的解密过程为:
解密过程也可以分为三个阶段:密文数据准备阶段、解密轮循环阶段和明文数据输出阶段。解密过程的第一阶段与加密过程的第三阶段是互逆的, 第三阶段与加密过程的第一阶段是互逆的。在解密过程的第二阶段, 密钥的使用顺序是W[10]……W[0], 与加密时相反。需要特别注意的是, 在解密轮循环阶段, 字节替换操作函数InvSubBytes (state) 中所使用的替换表与加密时不同:
将state[r][c]作为索引, 取数组invsBox[]中的元素赋值给state[r][c]。例如:如果state[0][0]=0xd4, sBox[state[0][0]]即为sBox[212], 对应值为0x19, 实际上即是替换表第d行第4列上的元素, 正好与加密时相反, 如此类推。
另外需要注意的是, 列混合变换InvMixColumns (state) 操作中, 与加密时不同, FFmul函数的参数为0x0e、0x0b、0x0d和0x09, 操作结果与加密时相反:
三、AES算法密钥扩展
在AES算法中, 可以使用128位 (16字节) 、192位 (24字节) 或256位 (32字节) 长度的密钥对数据进行加密, 三种长度的密钥分别被扩展成11组、13组、15组。128位 (16字节) 长度的密钥扩展程序如下:
第1组密钥w[0][r][c]直接使用原始密钥, 密钥扩展程序只是将128位 (16字节) 原始密钥重新进行排序:
第2~11组密钥w[1][r][c]-w[10][r][c]用以下方式得到:对于第2~11组第1列密钥w[1≤i≤10][r][0], t[r]首先取前1组第4列密钥w[i-1][r][3], 然后再通过sBox对t[r]进行置换;对于第2~11组第2、3、4列密钥w[1≤i≤10][r][1≤c≤3], t[r]直接取本组第1、2、3列密钥。之后, 将前1组每列4行密钥w[i-1][r][c]与t[r] (t[0]、t[1]、t[2]、t[3]) 进行异或运算, 即得到第2~11组密钥w[1][r][c]-w[10][r][c]。
四、AES算法安全性分析
数据加密是维护数据安全的重要手段。作为DES的继承者, AES已经被工业界、银行业和行政部门作为事实上的密码标准, 并逐渐取代DES在IPSec、SSL和ATM中的加密功能。在这种情况下, 除了要求能够高效实现以外, AES算法的安全性问题显得尤为突出。正如DES算法使输入与输出之间呈现非线性映射关系一样, AES算法每次以16字节 (128位) 数据块State[4][4]为对象, 通过将数据与密钥进行异或运算、对数据进行置换、将数据行列进行变换等操作, 最大限度地模糊输出对输入的依赖, 从而有效地保护数据安全。
(一) AES加密算法将密钥的位数提高到16字节 (128位) 以上, 极大地增加了破解密文的难度。由于AES算法是在公众广泛参与和专家严密论证的基础上产生的, 是一个已经公开的算法, 因此, AES算法密钥本身特别是密钥长度对保护数据安全十分重要。但到目前为止, 要强行遍历搜索所有可能的16字节 (128位) 以上的密钥, 即使最快的计算机系统在有效时间内也是无法做到的。
(二) AES加密算法除对数据进行普通替代和置换外, 还引入了域乘法和加法运算, 以增加加密强度。列混合变换MixColumns (state) 所进行的域乘法和加法运算是基于名为GF (28) 有限域理论的。G代表这一数学理论的发明者法国数学家伽罗华 (Galois, 公元1811年~公元1832年) ;F即Field, 表示数学域;28=256, 表示有限域范围位于集合{0x00…0xff}之中。虽然AES算法中的GF (28) 域乘法和加法运算仅在state[4][4]中的元素与0x01、0x02、0x03、0x09、0x0b、0x0d和0x0e七个常数之间进行, 乘法和加法也只是移位和异或运算, 但是, 将数学原理巧妙地应用于密码分析实践之中, 这种加密方式有效地增加了对数据的加密强度。
(三) AES 算法强调通过大量轮数来增加加密数据的复杂性。根据密钥长度, AES 算法对16字节 (128位) 数据的加密轮数分别是11、13和15轮, 当前的密码分析研究表明, 迭代型分组密码抗击密码分析攻击的能力随着加密轮数的增加而增加。AES算法通过轮变换产生的高扩散性, 归功于它在所有状态比特上的均匀结构, 每个状态比特均依赖于两轮之前的所有状态比特, 或者说, 一个状态比特的改变均可能对两轮之后的半数状态比特产生影响。研究表明, 捷径攻击比穷尽密钥搜索攻击更有效。目前, 尚未发现能够对具有6轮以上的经AES算法加密的数据有效的捷径攻击。如果考虑还有4轮以上的安全余量, 捷径攻击AES算法成功的可能性就更小。
虽然到目前为止还没有已知的密码分析攻击可以破解AES加密的数据, 但是, 由于AES算法密钥扩展过程中, 某一轮的密钥都是由前一轮的密钥推导而来的, 如果我们知道了某轮密钥的部分字节, 就有可能递推出本轮密钥的其它字节。当泄露的密钥信息达到一定程度时, 或许就可以通过穷举法获得某一轮的密钥, 进而获得全部轮子密钥。
参考文献
[1].Federal Information Processing Standards Publication197, No-vember26, 2001.Announcing the Advanced Encryption Standard.Http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf.
[2].[美]Richard Spillman.经典密码学与现代密码学[M].叶远健, 曹英, 张长富译.北京:清华大学出版社, 2005
[3].[美]David Salomon.数据保密与安全[M].蔡建, 梁志敏译.北京:清华大学出版社, 2005
加密标准 篇6
cdma2000 1x通信系统通过反向业务信道的扩频及前向业务信道的加扰, 从而达到语音通信一定的私密性。扩频和加扰都通过周期为242-1的长码 (伪随机噪声序列) 完成, 如此巨大的数量, 很难被暴力破解。
在cdma2000 1x系统中, 长码是前向和方向业务信道上用户的唯一标识, 特定用户的长码由长码掩码确定, 长码掩码分公共长码掩码 (Publice Long Code Mask) 及私有长码掩码 (Private Long Code Mask) 两种, 对于非加密语音, cdma2000 1x系统采用公共长码掩码来进行扰码和扩频, 通过公共长码的扩频和加扰, 可以达到一定的私密性。
但在cdma2000标准中, 公共长码掩码与用户的ESN是——对应的, 具体是通过对32位ESN进行重新排序后, 增加10位固定比特组合而成。由此可知, 对于每一个用户 (终端) 而言, 其公共长码掩码是固定的, 只要获取了ESN号码, 即可获得长码掩码, 故其私密性是有限的。
为了进一步提高CDMA系统语音通信的私密性, cdma2000 1x标准[1]中提出了语音加密 (VP:Voice Privacy) 的概念。即通过在前向和反向业务信道中将公共长码改为私有长码, 通过私有长码的私密性来达到语音加密的目的。私有长码掩码由SSD_B参数利用CAVE (蜂窝鉴权和语音加密) 算法生成[1]。SSD_B是128比特SSD (共享秘密数据) 中的64比特, SSD参数是由CDMA终端及网络共享的秘密数据, 但不在网络中传输, 因此大大的提高了私有长码掩码的隐秘性, 从而也提高了语音通信在空中的私密性。
从现有3GPP2标准[1]上看, MS始呼和MS被呼的语音加密是相对独立的, 因此存在一种情况:通话双方中的一方空口为明话通话, 而另一方空口为密话, 因此本次通话的安全性也是有限的, 为了进一步提高通话的安全性, 本文提出了一种在始呼时, 同时启用主被叫空口语音加密功能的改进方案。
本文第2章介绍了cdma2000 1x网络中的语音加密机制, 第3章提出了改进建议和实现方案, 第4章为本文总结。
2 cdma2000 1x空口语音加密原理
2.1 实现原理概述
cdma2000 1x对于语音加密仅在业务信道中提供, 且在统一查询已被激活的前提下, 通过使用专用的长码掩码来实现。
在终端侧, 私有长码掩码由UIM卡计算获得, 而在网络侧, 私有长码掩码的计算由AC (SSD不共享时) 或VLR (SSD共享时) 完成, 通过用户的服务MSC/MSCe下发给BSS。
终端MS可以在接入cdma2000 1x网络前设置为加密模式 (打开VP功能) , 然后在始呼或被呼时通知网络侧进行语音加密。终端MS也可以在通话过程中, 切换加密模式 (打开或关闭VP功能) 。
cdma2000 1x标准空口语音加密机制的启动涉及的网元包括MS、BSS、MSC/VLR和HLR/AC。其中, HLR/AC存放用户的鉴权参数, 并区分用户是否签约VP业务。MS在HLR开户时, 需要打开鉴权功能, 同时签约VP业务。下面描述具体的实现原理和流程。
2.2 MS始呼和终呼时的语音加密
当SSD不共享时, MS始呼的加密流程如图1所示。
MS始呼流程中, 启用加密的流程说明如下:
(1) MS在向BSS发送的始呼消息Origination Message中携带的PM (Privacy Mode Indicator) [1]字段置1, 请求本次呼叫启用VP功能, 并利用SSD_B参数通过CAVE算法计算私有长码掩码PLCM;
(2) BSS收到MS的请求后, 在向MSC发送的业务请求消息CM Service Request中携带Voice Privacy Request字段[3], 请求启用VP功能;
(3) MSC收到CM Service Request消息后, 发现用户已签约VP业务, 在向HLR/AC发送的鉴权请求消息Authentication Request中携带Confidentiality Modes参数中的VP字段置1[4], 要求HLR/AC计算用户的私有长码掩码;
(4) HLR/AC对用户鉴权并通过后, 计算用户的私有长码掩码PLCM, 并通过鉴权响应消息Authentication Response的CDMAPrivateLongCodeMask参数[4], 将PLCM返回给MSC;
(5) MSC确认用户通过鉴权, 并获得私有长码掩码后, 向BSS发送指配请求消息Assignment Request, 请求分配无线资源, 并通过消息中的Encryption Information参数[3]携带获得的私有长码掩码;
通过上述步骤, MS侧和BSS侧都获得了本次通话的私有长码掩码;
(6) B S S与M S交互并确认完成空口业务配置之后, 向MS发送长码转换请求指令Long Code Transition Request Order[1], 通知MS在指定时间内启用私有长码掩码PLCM;
(7) MS收到请求指令后, 向BSS返回长码转换响应指令Long Code Transition Response Order[1]进行确认;
(8) 完成转换交互后, B S S在指配完成消息Assignment Complete中用Encryption Information参数[3]通知MSC语音加密已经激活;
通过上述步骤, MS侧和BSS侧都启用了私有长码掩码对语音信道进行加密, 在呼叫应答之后, 本侧的空口便进入密话通话状态。
当SSD不共享时, MS终呼的加密流程如图2所示。
MS终呼时, 启用语音加密的流程说明如下:
(1) MS收到来自网络的寻呼请求后, 将发往BSS的寻呼响应消息Page Response Message中的PM字段置1[1], 请求本次通话本端空口启用语音加密;
(2) BSS收到MS的寻呼响应消息后, 向MSC发送寻呼响应消息Paging Response Message, 消息中携带Voice Privacy Request字段[3], 请求启用语音加密;
(3) MSC收到寻呼响应消息后, 发现用户已签约VP业务, 在向HLR/AC发送的鉴权请求消息Authentication Request中携带Confidentiality Modes参数中的VP字段置1[4], 要求HLR/AC计算用户的私有长码掩码;
(4) HLR/AC对用户鉴权并通过后, 计算用户的私有长码掩码PLCM, 并通过鉴权响应消息Authentication Response的CDMAPrivateLongCodeMask参数[4], 将PLCM返回给MSC;
(5) MSC确认用户通过鉴权, 并获得私有长码掩码后, 向BSS发送指配请求消息Assignment Request, 请求分配无线资源, 并通过消息中的Encryption Information参数[3]携带获得的私有长码掩码;
通过上述步骤, MS侧和BSS侧都获得了本次通话的私有长码掩码。
(6) BSS与MS交互并确认完成空口业务配置之后, 向MS发送长码转换请求指令Long Code Transition Request Order[1], 通知MS在指定时间内启用私有长码掩码PLCM;
(7) MS收到请求指令后, 向BSS返回长码转换响应指令Long Code Transition Response Order[1]进行确认;
(8) 完成转换交互后, B S S在指配完成消息Assignment Complete中用Encryption Information字段通知MSC语音加密已经激活;
通过上述步骤, MS侧和BSS侧都启用了私有长码掩码对语音信道进行加密, 在呼叫应答之后, 本侧的空口便进入密话通话状态。
对于SSD共享的情况, 与SSD不共享时的区别在于鉴权和PLCM的计算在VLR完成而不是AC, 其他过程类似, 此处不再赘述。
2.3 通话过程中的加密切换
在通话过程中, MS可以通过请求将公有长码掩码切换到私有长码掩码, 或者将私有长码掩码切换到公用长码掩码, 实现在非加密模式与加密模式之间的切换。
当SSD不共享时, MS请求公用长码掩码转私有长码掩码的流程如图3所示。
流程说明如下:
(1) 在呼叫建立过程中, 终端未请求语音加密, MS向BSS发送的Origination Message消息 (始呼) 或Page Response Message消息 (终呼) 中, BSS向MSC发送的CM Service Request消息 (始呼) 或Paging Response Message消息 (终呼) 也未携带Voice Privacy Request字段;
(2) 但H L R/A C对用户进行鉴权时, 发现用户已签约VP业务, 则计算用户的私有长码掩码PLCM并通过鉴权响应消息Authentication Response中的CDMAPrivateLongCodeMask参数送往MSC/VLR;由于BSS并未请求启用VP, 故MSC在发往BSS的支配请求消息中并未携带私有长码掩码;
(3) 在明话通话过程中, 用户请求启动语音加密, MS计算私有长码掩码, 并向BSS发送Long Code Transition Request Order, 请求启用VP;
(4) BSS收到请求后, 向MSC发送Privacy Mode Complete, 且消息中携带Voice Privacy Request字段, 请求启用VP;
(5) MSC收到Privacy Mode Complete消息后检查系统是否支持VP功能, 如果系统支持VP功能, 则向BSC返回Privacy Mode Command, 且在消息中通过Encryption Information字段携带PLCM;
(6) BSS与MS交互并确认完成空口业务配置之后, 向MS发送长码转换请求指令Long Code Transition Request Order, 通知MS在指定时间内启用私有长码掩码PLCM;
(7) MS收到请求指令后, 向BSS返回长码转换响应指令Long Code Transition Response Order进行确认;
(8) 完成转换交互后, B S S在指配完成消息Assignment Complete中用Encryption Information字段通知MSC语音加密已经激活;
当SSD不共享时, MS请求私有长码掩码转公用长码掩码的流程如图4所示。
流程说明如下:
(1) MS向BSS发送Long Code Transition Request Order, 请求进行加密转换;
(2) BSS向MS发送Long Code Transition Request Order, 通知MS在指定时间不使用私有长码加密, 改用公有长码掩码;
(3) MS返回Long Code Transition Response Order, 确认接受了转换长码掩码的指示;
(4) 收到Long Code Transition Response Order后, BSS向MSC发送Privacy Mode Complete, 消息中携带Encryption Information字段, 通知MSC语音加密去激活。
2.4 用户切换时的VP操作
为了实现用户切换后可正常启用VP功能, 网络侧的目标BSC和目标MSC需要获得该用户所用的私有长码掩码。
当用户发起MSC局内BSC间硬切换时, 其部分流程如图5所示。
流程说明如下:
(1) 源BSC向MSC发送切换切换申请Handoff Required[3]消息, 消息中携带加密信息EncriptionInformation;
(2) MSCe收到Handoff Required[3]消息后, 在向目标BSC发送的切换请求消息Handoff Request中携带的Encription Information中加入私有长码掩码;
(3) 目标BSC在返回给MSC的切换请求确认消息Handoff Request Acknowledge中, 携带Hard Handoff Parameters, 通过参数中的Private LCM字段置1指示启用私有长码掩码, 置0指示不启用私有长码掩码[3];
(4) MSC将目标BSC上报的语音加密结果与MS切换前的语音加密状态进行比较:
(1) 如果MS在切换前处于语音加密状态, 且目标侧语音加密成功, MSC将允许切换, 并给源BSC下发切换命令消息Handoff Command指示局内硬切换成功;
(2) 如果MS在切换前处于语音加密状态, 而目标BSC返回语音加密失败, 则MSC将拒绝切换;
(3) 如果MS在切换前不处于语音加密状态, 则不管目标BSC返回的结果如何, MSC将允许切换;
当用户发起MSC局间BSC间硬切换时, 不同的MSC局间通过居间信令FacilitiesDirective2 (FACDIR2) [4]中的CDMAPrivateLongCodeMask参数传递私有长码掩码, 通过信令中的Confidentiality Modes参数中的VP字段指示语音加密状态, 其他流程与局内硬切换时的流程类似。
3 改进建议
从上述cdma2000 1x空口语音加密机制可以看出, 用户在始呼和终呼时启用语音加密的流程是相对独立的, 因此当通话的主被叫都在CDMA网络时, 主叫方和被叫方可能同时启用了空口语音加密, 也可能只有一方启用, 另一方未启用。在只有一方启用空口语音加密的情况下, 本次通话的私密性无法得到真正的保护。因此, 本文提出了一种改进建议和实现方案, 当主叫方发起语音加密呼叫时, 可同时请求对方的空口也启用语音加密。
3.1 实现方案
要实现上述方案需要完成三项工作:主叫终端需告知主叫服务MSC请求对端空口加密, 主叫服务MSC将该请求告知被叫服务MSC及BSC, 被叫终端在未打开VP功能情况下收到加密模式切换请求时能自动打开VP功能。
具体实现方式如下:用户通过在被叫号码前增加接入码方式 (或通过增加相应菜单供用户选择, 终端在发起呼叫时自动增加接入码) 告知主叫MSC请求对端空口加密;主叫MSC通过分析接入码, 在触发本端空口语音加密的同时, 通过在MAP信令或局间ISUP信令中增加VP字段两种方案将该请求转至被叫MSC, 被叫MSC再将该请求转至被叫MS。
SSD不共享时, 基于MAP信令的实现方案信令流程如图6所示。
流程说明如下:
(1) 主叫MS在向主叫侧BSS发送的始呼消息Origination Message中携带的PM字段置1, 同时被叫号码中加特殊前缀, 请求本次呼叫同时启用本端空口和对端空口VP功能, 并通过2.2节所述流程完成了终端及BSS中的公共长码掩码的获取;
(2) 主叫侧MSC通过特殊前缀识别MS要求对端空口加密的请求, 在向HLR发送位置请求消息Location Request时, 通过扩展字段 (VP=1) 携带该加密请求;
(3) HLR通过路由请求消息Route Request的扩展字段 (VP=1) , 通知被叫侧MSC;
(4) 被叫侧收到该请求后, 无论被叫MS是否请求空口加密, 都向HLR要求计算私有长码掩码, 并通过指配请求消息下发给BSS;
(5) 被叫侧BSS与被叫MS交互并确认完成空口业务配置之后, 向MS发送长码转换请求指令Long Code Transition Request Order, 通知MS在指定时间内启用私有长码掩码PLCM;
(6) MS收到请求指令后, 计算私有长码掩码, 并向BSS返回长码转换响应指令Long Code Transition Response Order进行确认, 在业务信道上启用私有长码掩码加密;
SSD不共享时, 基于局间ISUP信令的实现方案信令流程如图7所示。
ISUP方案与MAP方案主要的区别在于主叫侧MSC通过局间ISUP信令将主叫MS的请求转发到被叫侧网络。在初始地址消息中通过扩展字段VP并置1, 要求被叫侧空口启用加密。
对于同一MSC下的局内呼叫, 可作为局间呼叫的特例, 除不需通过MAP或ISUP信令传递加密请求外, 其他流程与上述说明一致。
对于SSD共享的情况, 与SSD不共享时的区别在于鉴权和PLCM的计算在VLR完成而不是AC, 其他过程类似。
3.2 方案分析
改进方案要求主被叫终端和网络都支持VP功能, 并且要求相关的网络设备支持MAP或ISUP信令利用原有的保留字段作为扩展的VP字段, 具体采用哪些字段, 可以在工程实现时具体选择。
在cdma2000 1x标准空口语音加密方案中, 主被叫空口语音加密的启用与否是相互独立的, 如果被叫短未启用空口语音加密, 则即使主叫在发起呼叫时启用了空口加密, 本次通话的隐私性也是有限的。通过本改进方案, 在一次呼叫中实现主被叫两侧的空口都启用语音加密功能, 进一步提高了通话的私密性。
4 总结
CDMA网络素有安全、私密的美称, 其通过长码进行扩频及加扰提供了基本的安全保障。本文介绍了cdma2000 1x标准中在此基本安全保障上提供的进一步安全扩展:语音加密, 即标准中的Voice Privacy功能, 并提出了一种针对语音加密功能的改进, 通过此改进方案, 可以在一次呼叫中同时启用主被叫侧的VP功能, 进一步保障本次通话的安全性。
参考文献
[1]3GPP2C.S0005-A-1Upper Layer (Layer3) Signaling Specification for cdma2000Spread Spectrum Systems Release A-1.
[2]3GPP2S.S0053-0_v1.0Common Cryptographic Algorithms
[3]3GPP2A.S0014Interoperability Specification (IOS) for cdma2000Access Network Interfaces-Part4 (A1, A1p, A2and A5Interfaces)