1、北京航空航天大学第二十一届“冯如杯”学生参赛作品1第二十一届“冯如杯”学生学术科技作品竞赛论文PalmSec基于 Android 的手持身份认证与多媒体保密通信终端项 目 编 号 院(系)名 称 电子信息工程学院 专 业 名 称 高等工程 作 者 姓 名 刘潇 学 号 38230120 指 导 教 师 刘建伟 2011 年 4 月北京航空航天大学第二十一届“冯如杯”学生参赛作品2PalmSec基于 Android 的手持身份认证与多媒体保密通信终端PalmSecAndroid-based Portable Terminal with Identity Authentication and Mu
2、ltimedia Secure Communication北京航空航天大学第二十一届“冯如杯”学生参赛作品1摘 要为防御日益严重的病毒与黑客攻击,保护重要数据与用户隐私,作者利用ARM11 的嵌入式平台,开发了基于 Android 的手持身份认证与多媒体保密通信终端。作品具有以下四大功能:蓝牙近场认证,SD 卡文件加解密,Diffie-Hellman 密钥交换和多媒体保密通信。为在终端上运行 Android 操作系统,作者先将 Linux 2.6.36 内核移植至ARM11 平台,然后开发蓝牙、WiFi、SD 卡和摄像头驱动程序,最后编译并挂载 Android 2.3 根文件系统。作者使用 J
3、ava 在 Eclipse 集成开发环境中进行终端程序的开发,使用 C+和 Java 在 NetBeans 集成开发环境中进行 PC 端程序的开发。作品使用 Android 蓝牙 API 与一次性口令实现蓝牙近场认证。主机绑定终端后,会通过蓝牙循环扫描终端是否在线。如果用户携带终端离开主机蓝牙的通信范围,主机将自动锁屏。终端与主机重新建立蓝牙连接后,用户需输入终端显示的 6 位 OTP,以完成身份认证。作品利用使用 Android 文件 API 读取 SD 卡文件,用户输入密码后,可使用 256bitAES 分组密码算法加密文件,并可将加密后的文件通过蓝牙、WiFi 和邮件发送其他设备。本作品
4、利用 Java 的 JCA 密码架构、网络编程和多线程技术完成密钥交换和多媒体保密通信。终端与主机首先利用 D-H 密钥交换协议建立会话密钥,然后终端将经 256 bit AES 分组密码算法加密后的音频和视频流通过UDP 协议发送至主机,主机可在本地播放收到的多媒体文件,也可将其转发至其他终端。作品实现了基于 Android 的手持身份认证与多媒体保密通信,可保护重要数据与用户隐私免受病毒与黑客的攻击,提高了通信系统的安全性。关键词:Android,身份认证,保密通信,Diffie-Hellman 密钥交换协议,AES分组密码算法,Java 编程AbstractTo defense agai
5、nst the growing viruses and hacker attacks, protect critical data and user privacy, project team use ARM11 embedded platform to develop Android-based hand-held identity authentication and multimedia secure communication mobile terminal. The mobile device has the following four functions: Bluetooth n
6、ear-field authentication, SD card file encryption and decryption, D-H key exchange and multimedia secure communication.In order to run the Android operation system on the terminal, our team first transplant the Linux kernel 2.6.36 to ARM11 platform, then develop the drivers of Bluetooth, Wi-Fi ,SD c
7、ard and camera. Finally we compile the Android 2.3 root file system and mount it on ARM11. We use Java in Eclipse IDE for terminals program development, use C+ and Java in NetBeans IDE for PCs program development. The work uses Android Bluetooth API and one-time password to achieve the Bluetooth nea
8、r-field certification. After binding the host and the device, the host will use Bluetooth to scan whether the device is online. If the user takes the device away from the host Bluetooth communication range , the computer will automatically lock screen. After mobile device and the host re-establish a
9、 Bluetooth connection, user needs to enter the 6 digit OTP code which will be displayed on the mobile device, to complete the authentication.The terminal uses Android file API to read SD card. After enters the password, the user can use the 256 bits AES block cipher to encrypt files and send the enc
10、rypted files through Bluetooth, Wi-Fi or email to other devices. We use JCA, network programming and multithreading in the keys exchange and secret multimedia communication. First, the host and terminal establish session keys using Diffie-Hellman key exchange protocol. Then the terminal will send th
11、e audio and video streams which are encrypted via 256 bit AES block cipher to the host in UDP packages. The host can play the received media file or forward it to the other devices. The work achieves Android-based hand-held authentication and multimedia secure communication, it can protect critical
12、data and user privacy against viruses and hacker attacks, which improves security of computer system.Key words: Android, identity authentication, secure communication, Diffie-Hellman key exchange protocol, AES block cipher, Java programming摘 要 .3Abstract4第 1 章 作品介绍 .71.1 背景分析 71.2 作品特色 71.3 相关工作 81.
13、4 应用市场分析 8第 2 章 实现方案 .92.1 技术背景 92.1.1 为何选择 JAVA 语言 .92.1.2 Android 操作系统 102.1.3 Netbeans 和 Eclipse 开发平台 .102.1.4 加密系统 112.1.5 动态口令技术 152.2 实现原理 162.2.1 Diffie-Hellman 密钥交换协议原理 .162.2.2 AES 加密原理 172.2.3 一次性口令原理 .182.3 系统方案及软件流程 202.3.1 蓝牙设备绑定与搜索 .202.3.2 路由表的建立 .222.3.3 软件功能 .252.3.4 加密系统 .26第 3 章 创
14、新性 .283.1 创新性 283.1.1 密钥分发 283.1.2 保密通信 293.2 技术难点 313.2.1 Diffie-Hellman 和 AES 相结合的密钥分发与加密机制 .313.2.2 大数据量实时语音加解密技术 .323.2.3 替换 Windows 登录界面 32第 4 章 总结 .334.1 工作总结 334.1.1 实现功能 .334.1.2 应用算法 .334.2 进一步工作 334.2.1 功能丰富完善 .334.2.2 算法优化 .344.2.3 硬件平台拓展 .34北京航空航天大学第二十一届“冯如杯”学生参赛作品1第 1 章 作品介绍1.1 背景分析移动电子
15、商务是电子商务的一个新的分支,但是从应用角度来看,它的发展是对有线电子商务的补充和发展,是电子商务发展的新形态。移动电子商务将传统的商务和已经发展起来的、但是分散的电子商务整合起来,将各种业务流程从有线向无线转移和完善,是一种新的突破。随着计算机网络应用技术、电子商务以及通信系统的不断发展,移动电子商务(Mobile Commerce,简称M-Commerce)的出现开启了一个崭新的销售和促销模式,移动支付问题是移动商务中的关键问题,其中应用安全问题无疑是移动支付的最大障碍。常见的移动支付安全问题包括终端窃取与假冒、交易抵赖、拒绝服务、应用系统授权管理混乱、系统登录账号难以有效管理所形成的安全
16、漏洞、各应用系统各自为政导致重复开发重复管理、认证方式单一等。现有应用系统大多采用单一的用户名/口令认证的方式,这种方式容易被非法窃取现有应用系统大多采用单一的用户名/口令认证方式,这种方式容易被非法窃取,难以有效准确的确认用户身份的真实性,安全强度低,难以保证数据的安全访问。作品的安全系统正是为解决上述问题而提出,保证了移动支付中的身份验证、数据加密、数据完整性、不可抵赖性等安全需求。通过对作品进一步开发,可以集中解决移动支付过程中的应用安全及管理问题,降低系统安全风险,提高交易可靠性。1.2 作品特色作品采用最新的 Android 操作系统,并利用 ARM11 嵌入式平台中集成的语音设备、
17、蓝牙设备、WiFi 设备、SD 卡等,实现了强身份认证和和多媒体保密通信。虽然市场上已经有动态口令、iPhone 等通信终端和文件管理终端等产品,但是目前还没见到能够实现蓝牙近场认证并同时可实现多媒体保密通信的手持终端。1.3 相关工作具体工作如下:1. 编写路由表获取与更新对象,拟定路由表更新数据包的格式,采用java.util 库中的字符串拆分类库、ArrayList 类库和 库中的 socket 网络编程类库实现路由表获取和更新的消息组合、传递、获取和分析功能。2. 编写文字信息的单播和广播对象,采用动态数组的遍历数据结构实现广播通信,并采用 类库中的 Socket 网络编程类库实现
18、文字信息的单播和广播。3. 分别编写语音信息获取对象 audioCaputure、语音信息发送接收对象audioStation、语音信息的回拨对象 audioPlayback。利用 java.sound 类库中的音频流编程方式实现相关功能。4. 手动编写 Diffie-Hellman 加密对象 DHexchange,采用 java.math 类库实现大数的指数和取模计算,采用 java.util 类库中的 Random 对象实现随机素数的生成工作。5. 编写 AES 加密解密函数 EncryptAES 和 DecryptAES,利用 javax.crypto类库实现 AES 密钥的生成功能,分
19、别利用 Cipher 类库中的消息加密方式和消息流加密方式进行文字和语音 AES 加密和解密功能。1.4 应用市场分析作品提供的加密功能解决了网络密钥传递过程中以及语音文字加密通信过程中的安全问题。这意味着只要有可用的硬件平台,都可以通过本作品实现安全通信。本作品进行产品化后,可以广泛应用于电子商务和电子政务中。具体包括:(1)在各种网上交易中,用户可采用 PalmSec 实现移动电子支付;(2)在政府和商业等保密部门中,用户可采用 PalmSec 进行移动多媒体保密通信;(3)在大型的航空、铁路等货场,工作人员可采用 PalmSec 实现物流调度和指挥等。第 2 章 实现方案2.1 技术背景
20、2.1.1 为何选择 JAVA 语言Java 程序设计语言和 Java 平台是由 Sun Microsystems 公司于 1995 年 5 月推出的跨平台编程环境。对比于传统的 C 语言和 C+语言,JAVA 具有跨平台、动态 Web、Internet 计算等突出的优点,其突出的完全面向对象设计模式对于网络程序设计具有不可比拟的优势。Java 平台由 Java 虚拟机(Java Virtual Machine)和 Java 应用编程接口(Application Programming Interface、简称 API)构成。Java 应用编程接口为Java 应用提供了一个独立于操作系统的标准
21、接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个 Java 平台之后, Java 应用程序就可运行。现在 Java 平台已经嵌入了几乎所有的操作系统。这样 Java 程序可以只编译一次,就可以在各种系统中运行。其次,嵌入式操作系统选用的是 Google 公司推出的 Android 操作系统。Android 操作系统的底层使用 Linux 操作系统,内置了 C 与 C+语言实现的功能,但 Android 的编程语言为 Java 语言,内置功能也通过 JNI 接口与 Java 平台进行无障碍过度。所以,使用 Java 平台编写嵌入式操作系统和 Windows 操作系统是可行的也是必要
22、的。另外,Java 语言是动态的。 Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这完全满足软件对于平台的需求。最重要的是,Java 语言是安全的。 Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外,Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader) ,如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类 SecurityManager)让 Java 应用设置安全哨兵。JAV
23、A 平台本身的这种特性也更好的保护软件不被恶意攻击,更好的提高了软件的安全性,而这是最基本也是最重要的需求。2.1.2 Android 操作系统嵌入式操作系统中,我们使用了目前领域内最新推出的 Android 操作系统。Android 是基于 Linux 内核的操作系统,是 Google 公司在 2007 年 11 月 5日公布的手机操作系统,早期由 Google 开发,后由开放手持设备联盟(Open Handset Alliance)开发。它采用了软件堆层(software stack ,又名以软件叠层)的架构,主要分为三部分。底层 Linux 内核只提供基本功能;其他的应用软件则由各公司自
24、行开发,部分程序以 Java 编写。2011 年初数据显示,仅正式推出三年的操作系统 Android 已经超越称霸十年的塞班系统,跃居全球最受欢迎的智能手机平台,Android 系统不但应用于智能手机,也在平板电脑市场急速扩张。由于 Android 基于 Linux 内核的特性,Android 操作系统可以方便地移植到以 ARM11 为架构的,可以移植 Linux 操作系统的嵌入式平台中。系统的 Android 平台版本为 Android 2.3.2。系统的硬件配置如表 1 所示:CPU 处理器Samsung S3C6410AARM1176JZF-S 内核 主频 533MHzDDR RAM 内
25、存 256M DDR RAM;32bit 数据总线FLASH 存储 1GB Nand FlashLCD 显示4 线电阻式触摸屏 4.3 寸真彩 LCD分辨率 480*272 带触摸屏WiFi 无限设备 外接 20pin WiFiCMOS 摄像头 外接 20pin CMOS 摄像头Bluetooth 蓝牙设备 外接 USB 蓝牙表 1 系统硬件配置2.1.3 Netbeans 和 Eclipse 开发平台JAVA 编译环境我们分别采用了 Eclipse 与 NetBeans 的方式。其中,设备端程序的开发使用了 Eclipse 开发环境,PC 端程序的开发使用了 Netbeans 开发环境。Ec
26、lipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。但,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT) 。Eclipse 对比其他 JAVA 开发环境最大的特点就是其提供了强大的提示功能。在程序设计中,可以随时应用 Eclipse 自带的 JDK 说明来了解每一个函数的全部信息和提示。在整个软件的编写过程中,需要应用大量 JAVA 类库中所提供的函数、对象以及类库,Eclipse 的这种突出的特点很好的加快了软件的开发速度,缩短了软件开发
27、时间。不必将大多数时间应用到翻阅 SUN 公司所提供的JAVA 说明中,这对于底层程序的设计和编写具有重要的意义。另外,Android 平台官方推荐使用 Eclipse 平台进行软件系统的开发和界面的搭建。然而,Eclipse 并没有自带的 PC 端用户界面设计功能。用户界面的搭建需要完全通过程序设计。于是,PC 端我们采用 NetBeans 环境进行用户界面的搭建工作。对比 Eclipse 平台, NetBeans 平台的函数提示功能较差,在底层文件的编写过程中很难为用户提供足够的函数想、对象、类库信息。但是,其突出的用户界面设计功能为使用者所喜爱。其用户界面的搭建可以通过鼠标的拖拽完成,并
28、自动生成相应的代码,在 JAVA 平台中搭建出用户需要的界面,这极大的解放了程序员的工作量,程序员不必在各个组件的相对位置设计中花费大量的时间,而将更多的精力用在底层文件的设计和调试中。2.1.4 加密系统1 信息加密1)信息加密概念信息加密是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的密钥,仍然无法了解信息的内容。在密码学中,加密是将明文信息隐匿起来,使之在缺少密钥信息时不可读。在 20 世纪 70 年代中期,强加密(Strong Encryption)的使用开始从政府保密机构延伸至公共领域,并且目前已经成为保护许多广泛使用系统的方法,比如因特网
29、电子商务、手机网络和银行自动取款机等。加密可以用于保证安全性,但是其它一些技术在保障通信安全方面仍然是必须的,尤其是数据完整性和信息验证技术。例如,消息验证码(MAC)或者数字签名。另一方面的考虑是为了对抗流量分析。加密或软件编码隐匿(Code Obfuscation)同时也在软件版权保护中用于对付反向工程,未授权的程序分析,破解和软件盗版及数位内容的数位版权管理(DRM)等。加密和解密是建立在对信息进行数学变换的基础上。2)加密算法的分类加密类型分为两种,对称加密与非对称加密。对称加密双方采用共同密钥,这个密钥是需要对外保密的。对称加密示意图如图 2-1。加 密 算 法 解 密 算 法明 文
30、 原 来 明 文密 钥 K 密 钥 K图 2-1 对称加密示意图非对称加密示意图如图 2-2。加 密 算 法 解 密 算 法明 文 原 来 明 文私 钥 K 2 公 钥 K 1图 2-2 非对称加密示意图非对称加密中存在有两个密钥,一种是公钥,正如其名,这是一个可以公开的密钥值;一种是私钥,这个密钥对外保密。发送者发送信息给接收者时,使用公钥加密信息。一旦接收者收到加密信息,则使用私钥还原出明文信息。需要注意的是,发送者采用公钥加密的信息,只有接收者可以采用唯一的私钥解密。这样,在技术上就保证了加密过的信息只有接收者才能解读因为别人没有接收者的私钥。3)常用加密算法(1)单钥加密算法 DES(
31、Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合。但因其 56bit 的密钥较短,所以不再安全。 3DES(Triple DES):是基于 DES 的改进算法,它采用 128bit 密钥对 64bit 的明文分组进行 3 次 DES 加密,因此比 DES 更安全。 RC2 和 RC4:用变长密钥对大量数据进行加密,比 DES 快。 IDEA(International Data Encryption Algorithm):国际数据加密算法,由 Xuejia Lai 设计,使用 128 位密钥提供非常强的安全性。该算法已成为欧洲的数据加密标准。
32、 AES(Advanced Encryption Standard ):高级加密标准,是新一代的加密算法标准。其特点是速度快,安全级别高。目前 AES 标准的前身是 Rijndael 算法。它的密钥长度是 128bit/192bit/ 256bit 可变,分组长度为 128bit。目前,AES 算法是应用最广泛的单钥加密算法。(2)双钥加密算法 RSA:由 RSA 公司发明,是一个支持变长密钥的公共密钥算法,需要加密的文件分组的长度也是可变的。目前,私钥长度达 1024bit 的RSA 加密才是安全的。 DSA(Digital Signature Algorithm):国际数字签名标准 DSS
33、 中所采用的数字签名算法。2. 所选对称加密算法AESAES 又叫高级加密标准。高级加密标准(Advanced Encryption Standard,AES) ,在密码学 中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的 DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于 2001 年 11 月 26 日发布于 FIPS PUB 197,并在 2002 年 5 月 26 日成为有效的标准。2006 年,高级加密标准已然成为对称密钥加密中最流行的算法之一。不同于它的前任标准 DES,R
34、ijndael 使用的是 置换-组合架构,而非Feistel 架构。AES 在软件及硬件上都能快速地加解密,相对来说较易于实现,且只需要很少的存储器。作为一个新的加密标准,目前正被部署应用到更广大的范围。对比 DES,AES 最为突出的特点是使用最少 128 位的密钥进行数据的加密工作。可能的密钥数量由 DES 的 2 的 56 次方跃升为 2 的 128 次方或更多。以现今最为强大的计算机为标准,破解 AES 密钥的时间约为几十亿年,这保证了加密数据的安全性。严格地说,AES 和 Rijndael 加密法并不完全一样(虽然在实际应用中二者可以互换) ,因为 Rijndael 加密法可以支持更
35、大范围的 区块和密钥长度:AES 的区块长度固定为 128 位,密钥长度则可以是 128,192 或 256 位;而 Rijndael 使用的密钥和区块长度可以是 32 位的整数倍,以 128 位为下限,256 位为上限。加密过程中使用的密钥是由 Rijndael 密钥生成方案 产生。大多数 AES 计算是在一个特别的有限域完成的。3. DH 密钥传输方式使用 AES 进行解密之前,必须获得 AES 加密的密钥,而在 Ad hoc 网络中,除了相互通信的两个节点以外,其余节点都被考虑为不可信的,如何在不可信链路中传递 AES 密钥就成为了急切需要解决的问题。对此,软件选用了 Diffie-He
36、llman 密钥协商算法。DiffieHellman(DH)密钥交换是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。DiffieHellman 通过公共信道交换一个信息,就可以创建一个可以用于在公共信道上安全通信的共享秘密(shared secret)。2.1.5 动态口令技术动态口令(One-time Password)是根据专门的算法每次生成一个不可预测的随机数字组合,每个口令只能使用一次。动态口令令牌即是用来生成动态口令的终端。动态口令从技术来分有三种形式:时间同步、事件同步和挑战/应答。时
37、间同步的原理是将动态口令令牌和动态口令验证服务器的时间进行比较,基于时间同步的令牌,一般每 60 秒产生一个新口令,要求服务器能够十分精确地保持正确的时钟,同时对其令牌的晶振频率有严格的要求。基于事件同步的令牌,其原理是将某一特定的事件次序及相同的种子值作为输入,通过 Hash 算法运算出一致的密码。挑战/应答常用于网上业务。服务器向客户端下发挑战码,用户在动态令牌上输入该挑战码,通过内置的算法上生成一个 6/8 位的随机口令,该口令一次有效。这种技术目前应用最为普遍,包括刮刮卡、短信密码、动态令牌也有挑战/应答形式。 2.2 实现原理 2.2.1 Diffie-Hellman 密钥交换协议原
38、理DH 原理如图 2.3 所示。具体可以简单描述为:1. Alice 和 Bob 协定使用 以及底数23p5.g2. Alice 选择一个秘密整数 , 计算 并发送给 Bob。6amodaAp65mod238.A3. Bob 选择一个秘密整数 , 计算 并发送给 Alice。15bbBg159.B4. Alice 计算 6odm23.aspBob 计算 18bAAlice 和 Bob 最终都得到了同样的值,因为在 下 和 相等。odpabg计算 modaAgpmod()odm(od)mbababbaB AKApgpgpBK协商生成 g , pA l i c e秘密生成aB o b秘密生成b计算
39、 modbBgp交换计算结果 A 、 B计算 a 计算 odbp生成密钥 ABK图 2.3 Diffie-Hellman 密钥交换协议注意到 和 是秘密的。但其他所有的值,a,ab以及 都可以在公共信道上传递。 显然,窃听者(Eve),odpgodbgp可以截获到 及 。因此,如果窃听者有快速的求解离散对,ab数的算法,就能从已截获的上述信息中迅速求出 或 ,从而算出 。abmodabgp遗憾的是,目前世界上根本就没有快速的求解离散对数的算法,因此当所选的很大时, 或 就很难算出。如果 是一个至少 300 位的质数,并且 和 至pabp少有 100 位长, 那么即使使用全人类所有的计算资源和当
40、今最好的算法也不可能从 和 中计算出 。这就使得 DH 算法可以安全的传递密钥。,gmodapa一旦 Alice 和 Bob 得出了公共秘密,他们就可以把它用作对称密钥,以进行双方的加密通讯,因为这个密钥只有他们才能得到。当然,为了使这个例子变得安全,必须使用非常大的 以及 , 否则可以实验所有 的可,abpmod23abg能取值( 总共有最多 22 个这样的值, 就算 和 很大也无济于事)。 如果 是一bp个至少 300 位的质数,并且 和 至少有 100 位长,那么即使使用全人类所有的计算资源和当今最好的算法也不可能从 和 中计算出 。,gpodaa2.2.2 AES 加密原理AES 加密
41、过程是在一个 44 的字节矩阵上运作,这个矩阵又称为 “体(state ) ”,其初值就是一个明文区块(矩阵中一个元素大小就是明文区块中的一个 Byte) 。 (Rijndael 加密法因支持更大的区块,其矩阵行数可视情况增加)加密时,各轮 AES 加密循环(除最后一轮外)均包含 4 个步骤:Add Round Key 矩阵中的每一个字节都与该次回合金钥(round key)做 XOR 运算;每个子密钥由密钥生成方案产生。在每次的加密循环中,都会由主密钥产生一把回合金钥(通过 Rijndael 密钥生成方案 产生) ,这把金钥大小会跟原矩阵一样,以与原矩阵中每个对应的字节作异或()加法。Sub
42、 Bytes 通过一个非线性的替换函数,用查找表的方式把每个字节替换成对应的字节。矩阵中的各字节通过一个 8 位的 S-box 进行转换。这个步骤提供了加密法非线性的变换能力。S-box 与 GF(28)上的乘法反元素有关,已知具有良好的非线性特性。为了避免简单代数性质的攻击,S-box 结合了乘法反元素及一个可逆的仿射变换矩阵建构而成。 此外在建构 S-box 时,刻意避开了固定点与反固定点,即以 S-box 替换字节的结果会相当于错排的结果。Shift Rows 将矩阵中的每个横列进行循环式移位。在该步骤中,矩阵中每一行的各个字节循环向左方位移。位移量则随着行数递增而递增。Shift Ro
43、ws是针对矩阵的每一个横列操作的步骤。 在此步骤中,每一行都向左循环位移某个偏移量。在 AES 中(区块大小 128 位) ,第一行维持不变,第二行里的每个字节都向左循环移动一格。同理,第三行及第四行向左循环位移的偏移量就分别是 2 和 3。128 位和 192 位的区块在此步骤的循环位移的模式相同。经过Shift Rows 之后,矩阵中每一竖列,都是由输入矩阵中的每个不同列中的元素组成。Rijndael 算法的版本中,偏移量和 AES 有少许不同;对于长度 256 位的区块,第一行仍然维持不变,第二行、第三行、第四行的偏移量分别是 1 字节、3 字节、4 字节。除此之外,Shift Rows
44、 操作步骤在 Rijndael 和 AES 中完全相同。Mix Columns 为了充分混合矩阵中各个直行的操作。在该步骤中,每一直行的四个字节通过线性变换互相结合。每一直行的四个元素分别当作1,x,x2,x3 的系数,合并即为 GF(28)中的一个多项式,接着将此多项式和一个固定的多项式 c(x) = 3x3 + x2 + x + 2 在 modulo x4 + 1 下相乘。此步骤亦可视为 Rijndael 有限域之下的矩阵乘法。Mix Columns 函数接收 4 个字节的输入,输出4 个字节,每一个输入的字节都会对输出的四个字节造成影响。因此 Shift Rows和 Mix Column
45、s 两步骤为这个密码系统提供了扩散性。最后一个加密循环中省略 Mix Columns 步骤,而以另一个 Add Round Key取代。2.2.3 一次性口令原理一次性口令的生成原理是将基于事件的参数进行安全哈希算法(Secure Hash Algorithm,一下简称 SHA1)运算。SHA1 有如下特性:不可以从消息摘要中复原信息;两个不同的消息不会产生同样的消息摘要。根据此特性,可以保证不同的参数会产生不同的消息摘要。在取得参数的 160 位的信息摘要后,提取参数的某 6 位数字作为一次性口令。下面介绍 SHA-1 的算法原理。在 SHA1 算法中,我们必须把原始消息(字符串,文件等)转
46、换成位字符串。SHA1 算法只接受位作为输入。例:产生“abc”的消息摘要。将其转换成位字符串如下:01100001 01100010 01100011。需要总共 5 个步骤来完成计算。1 补位消息必须进行补位,以使其长度在对 512 取模以后的余数是 448。也就是说, (补位后的消息长度)%512 = 448。即使长度已经满足对 512 取模后余数是448,补位也必须要进行。补位是这样进行的:先补一个 1,然后再补 0,直到长度满足对 512 取模后余数是 448。2补长度补长度是将原始数据的长度补到已经进行了补位操作的消息后面。通常用一个 64 位的数据来表示原始消息的长度。如果消息长度
47、不大于 264,那么第一个字就是 0。3使用常量在运算中需要使用常量,在此以 16 进制的形式给出:Kt = 0x5A827999 (0 = t = 19)Kt = 0x6ED9EBA1 (20 = t = 39)Kt = 0x8F1BBCDC (40 = t = 59)Kt = 0xCA62C1D6 (60 = t = 79).4使用函数在 SHA1 中需要一系列的函数。每个函数 ft (0 = t = 79)都操作 32 位字B,C,D 并且产生 32 位字作为输出。 ft(B,C,D)按如下定义:ft(B,C,D) = (B AND C) or (NOT B) AND D) ( 0 =
48、t = 19)ft(B,C,D) = B XOR C XOR D (20 = t = 39)ft(B,C,D) = (B AND C) or (B AND D) or (C AND D) (40 = t = 59)ft(B,C,D) = B XOR C XOR D (60 = t = 79).5计算消息摘要必须使用进行了补位和补长度后的消息来计算消息摘要。计算需要两个缓冲区,每个都由 5 个 32 位的字组成,还需要一个 80 个 32 位字的缓冲区。第一个 5 个字的缓冲区被标识为 A,B,C,D,E。第一个 5 个字的缓冲区被标识为 H0, H1, H2, H3, H4。 80 个字的缓冲
49、区被标识为 W0, W1,., W79。另外还需要一个一个字的 TEMP 缓冲区。为了产生消息摘要,在第 4 中定义的 16 个字的数据块 M1, M2,., Mn 会依次进行处理,处理每个数据块 Mi 包含 80 个步骤。在处理每个数据块之前,缓冲区被初始化为下面的值(16 进制)H0 = 0x67452301 H1 = 0xEFCDAB89 H2 = 0x98BADCFE H3 = 0x10325476 H4 = 0xC3D2E1F0现在开始处理 M1, M2, . , Mn。为了处理 Mi,需要进行下面的步骤1 将 Mi 分成 16 个字 W0, W1, . , W15, W0 是最左边的字2 对于 t = 16 到 79 令 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16).3 令 A = H0, B = H1, C = H2, D = H3, E = H4.4 对于 t = 0 到 79,执行循环:TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt