已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章数字签名与认证5 1数字签名的基本概念1 数字签名及其特点在信息化社会 签名盖章和识别签名是一个重要的环节 例如 银行业务 电子资金传送 股票 证券交易 合同 协议的签字等 都需要签名 在计算机广泛应用的时代 应用密码学的方法实现数字签名 具有重要的理论意义 更具有重要实际意义 假设发送方sender发送了一个签了名的信息message给收方receiver 那么sender的数字签名必须满足以下条件 1 receiver能够证实sender对信息message的签名 2 任何人包括receiver在内 都不能伪造sender对message的签名 3 假设sender否认对信息message的签名 可以通过仲裁解决sender和receiver之间的争议 假定sender向receiver发送一则消息message 采用公开密码系统的签名过程描述如下 1 sender计算 c Da message 对message签名 Da是加密变换 所使用的秘密密钥为sender所私有 任何人 包括receiver在内 由于不知道sender的秘密钥 所以不能伪造sender的签名 2 receiver通过检查Ea c 是否恢复message来验证sender的签名 Ea是Da的逆变换 Ea变换中所使用的密钥是sender的公开钥 3 如果sender和receiver之间发生争议 仲裁者可以用2 中的方法鉴定sender的签名 例 sender表示一个银行电子支付系统的客户 receiver代表sender所在的银行 Receiver收到sender要求取款1000万日元的信息后 必须确定这个信息确实是由sender签名发出的 如果以后sender否认这一笔取款 receiver能够向仲裁者证实 这个取款单确实是由sender签署的 如果采用公开钥密码系统签名 密秘钥仅为sender所拥有 公开钥大家都知道 sender无法否认自己的签名 别人由于不知道秘密钥也无法冒名顶替sender的签名 在上例中 由于银行和客户之间的业务信息往来应秘密进行 所以这个签名系统除要求生成签名和验证外 还要求加密 当然 和纸上签名一样 并非所有的数字签名系统都要求保密性 以上介绍的数字签名方案属于所谓的 常规数字签名方案 这类方案具有如下特点 1 签名者知道他签署的报文的内容 2 任何人只要知道签名者的公开密钥 就可以在任何时候验证签名的真实性 不需要签名者的 同意 信号或来自其他方面的信号 3 具有基于某种单向函数运算的安全性 但在电子货币 电子商业和其他的网络安全通信的实用中 可能要放宽或加强上列特征中的一个或几个 或添加上其他安全性特征 以适应各种不同的需要 例如 在因特网上购买商品或服务 要向供应商或银行付款 顾客发出包含有他的银行账号或别的重要信息的付款报文 由收款者作出 电子 签名才能有效 但账号之类的信息又不宜泄露给签名者 以保证安全 这种情况 就要使用盲签名方案 BlindSignatureScheme 盲签名方案的工作原理是这样的 用户A有报文要求用户B签署 但不能让B知道关于报文m的任何信息 设 n e 是B的公开密钥 n d 是他的秘密密钥 A用专用通信软件生成一个与n互质的随机数r 将m remmodn发送给B 这样 B收到的是被r 遮蔽 的m值 即m 它不能从m 获取有关m的信息 接着 B发回签名值s m dmodn rem dmodn remdmodn A对收到的s 计算s re 1modn mdmodn 就得到了真正的来自于B的对m的签名s mdmodn可见 运用盲签名方案 A无法代替或冒充B的签名 而B则不知道他自己所签署的报文的真实内容 除了盲签名方案之外 还有其它几种专用数字签名方案 小组签名方案 GroupSignatureScheme 一个小组的任一成员可以签署文件 验证者可以确认签名来自该小组 但不知道是小组的哪一个成员签署了文件 一次性签名方案 OnetimeSignatureScheme 仅能签署单个报文的签名方案 不可抵赖签名方案 UndeniableSignatureScheme 在签名和验证的常规成分之外添上 抵赖协议 DisavowalProtocol 则仅在得到签名者许可信息后才能进行验证 带有数字时间标记系统 DigitalTimestampingSystem 的签名方案 将不可篡改的时间信息纳入数字签名方案 多重签名 使任意n个签名人产生的n个签名组成一个单一的签名 2 数字指纹仅用上述的数字签名是不够的 也是不实用的 因为数字签名不像纸上签名那样 签名和被签署的内容紧密联系在一起 因而不易被篡改 在数字签名中 如果sender的签名未与被签署的文件本身 message 相联系 就留下了篡改 冒充或抵赖的可能性 为了把那些千差万别报文 文件 和数字签名不可分割的结合在一起 即签名与其发送的信息紧密结合起来 需要设法从报文中提取一种确定格式的 符号性的摘要 称为 报文摘要 messagedigest 更形象的一种说法是 数字指纹 digitalfingerprint 然后对它进行签名并发出 可以说 真正的数字签名是信息发送者用其秘密密钥对从所传送的报文中提出的特征数据 或称数字指纹 进行RSA算法操作 以保证发信人无法抵赖曾发过该信息 即不可抵赖性 同时 也确保信息报文在传递过程中未被篡改 即完整性 当信息接受者受到报文后 就可以用发送者的公开密钥对数字签名进行验证 如果实体A要发送一个需要签署的报文给实体B 通信软件会调用某种报文摘要算法处理报文内容 得出一个数字指纹 然后用自己的秘密密钥将它加密 这才是真正的数字签名 将它同报文一并发送给B B接到报文和数字签名后 用A的公开密钥将数字签名解密 恢复出数字指纹 接着用A所用的一样的报文摘要算法处理报文内容 将算出的数字指纹和接受到的经解密的数字指纹比较 如果两者完全相同 则A的数字签名被B验证成功 可以相信该报文是真实的 确实是发自于A 否则 报文可能来自别处 或被篡改过 有理由拒绝该报文 用上述方法 别人也不难读取报文并验证数字签名 这在使用中是不妥当的 为使报文本身的内容不泄露给别人 A只要再添加一个操作步骤 用B的公开密钥现将待发的报文加密 当然 B在验证数字签名无误后 要用其自己的秘密密钥解密 才能得到原始机密信息 总之 报文摘要 是一种防止信息被篡改的方法 在数字签名中有重要作用的摘要算法 即生成报文 数字指纹 的方法 近年来倍受关注 构成了现代密码学的一个重要侧面 它是通过一类特殊的散列函数 Hash 生成的 这些函数的输入可以是任意大小的信息 而输出是一个固定长度的摘要 这些摘要有这样一个性质 如果改变了信息中的任何内容 甚至只改变了一位 输出摘要也将会发生不可预测的改变 即输入信息的每一位都影响输出的摘要 对这些Hash函数的特殊要求是 1 接受的输入报文数据没有长度限制 2 对任何输入报文数据生成固定长度的摘要 数字指纹 输出 3 从报文能方便的算出摘要 4 难以对指定的摘要生成一个报文 而由该报文可以算出该指定的摘要 即不可逆性 5 两个不同的报文难以生成相同的摘要 即唯一性 显然 上面前三点是实用性的要求 保证对长短不一的报文易于生成同样大小的 数字指纹 后两点则是安全性的要求 是建立在某种单向函数的基础之上的 这样摘要算法从给定的文本块中产生的数字签名 可以有效地防止从一个签名中获取文本信息或改变文本信息内容的行为 显然 客户机和服务器必须使用相同的算法 数字签名不同于手写签名 数字签名随文本的变化而变化 手写签名反映某个人个人特征 是不变的 数字签名与文本信息是不可分割的 而手写签名是附加在文本之后的 与文本信息是分离的 5 2数字签名算法DSADSA digitalsignaturealgorithm 算法是美国国家标准与技术学会 NationalInstituteofStandardsandTechnology NIST 于1994年公布的一个数字签名标准 DSA是一个公开钥数字签名算法 用于检验数据的完整性和一致性 第三方可以使用它来确认数字签名的合法性 1 DSA算法描述DSA是Schnorr和ELGamal数字签名算法的变体 DSA算法使用的参数含义如下 p L比特长的素数 其中L范围是从512比特到1024比特 并且要求是64的整数倍 在原始标准中p的尺寸固定的512比特 后来p的尺寸由NIST作了改变 q 160比特的数 并且要求是p 1的因子 g g h p 1 qmodp 其中h是小于p 1的任意数 并且h p 1 qmodp 1x 小于q的数y y gxmodp 前三个参数p q g是公开的 可以由一组网络用户共享 秘密密钥为x 公开密钥为y DSA算法还利用了单项哈希函数H m 该标准还规定了安全哈希算法 对信息m进行签名过程可以描述如下 1 发送方sender生成一个随机数k 并且k q2 发送方sender生成签名 r gkmodp modqs k 1 H m xr modq参数r和s是sender的签名 sender把这些信息发送给接收方receiver 3 receiver通过计算验证这些签名 w s 1modqu1 H m w modqu2 r w modqv modp modq如果v r 那么签名被证实 1 使用预先计算来加快速度DSA的实现经常是通过预先计算来加快速度的 注意到r的值不取决于信息 由随机数k确定 可以生成一串k值 然后再计算对应的r值 也可以计算k对应的k 1 于是 当对消息签名时 可以用给定的r和k 1进行计算 表5 1给出了DSA样本软件速度 表5 1对于不同的模长度带有160比特指数的DSA速度模长度签名验证512比特0 20秒0 35秒768比特0 43秒0 80秒1024比特0 57秒1 27秒如果p取512比特 DSA算法对长期安全强度是不够的 如果取1024比特 DSA算法对长期安全强度是足够的 3 DSA素数生成密码学家Lentra和Haber指出DSA的一些模是容易攻破的 如果一些网络用户使用这样的模 那么他的签名就会被伪造 但是这些模很容易被检测 而且数目很少 以至于选择这样的模的概率很小 NIST学会推荐生成两个素数p q的一个特别的方法 其中q能整除p 1 p长度为L比特 L范围是512比特到1024比特之间 并且是64的整数倍 素数q长度是160比特 令L 1 160n b 其中L是p的长度 n和b是两个数 b 160 DSA素数生成步骤如下 1 选择至少有160比特的任意序列 称之为S 令g是S的比特长度 2 计算U SHA S SHA S 1 mod2g 其中 SHA是安全哈希算法 3 设置U的最高有效位和最低有效位为1 形成q 4 检查q是否是素数 5 如果q不是素数 则转会步骤1 6 令C 0且N 2 7 对应k 0 1 2 n 令Vk SHA S N k mod2g 8 令W是一个整数W V0 2160V1 2160 n 1 Vn 1 2160nVn mod2b 并且令X W 2L 1 9 令p X Xmod2q 1 要求pmod2q 1 10 如果p 2L 1则转到步骤13 11 检查p是否是素数 12 如果p是素数 则转到步骤15 13 令C C 1且N N n 1 14 如果C 4096 则转到步骤1 否则转到步骤7 15 存储S和C的值 用于生成p和q 上式中 变量S称作 种子 C称作 计数器 N称作 偏移量 4 用DSA的RSA加密假设DSA算法由一个单独的函数调用实现 DSAsign p q g k x h r s 给函数提供参数p q g k x h 函数返回签名r s 使用RSA加密是比较容易的 设模为n 消息为m 公开密钥为e 调用DSAsign n n m e 0 0 r s 那么返回的r值就是密文 令c r 相应的 用RSA实现解密也是比较容易的 如果c为密文 d为秘密密钥 调用DSAsign n n c d 0 0 r s 那么返回的r值就是明文 5 DSA变体为了突出不同方面的实现特性 下面介绍几种变体 第一种变体使签名容易实现 它是通过使用户不去计算k 1来实现的 DSA变体的所有参数与DSA中参数相同 为了对信息m签名 发送方生成两个随机数k和d 且k q d q 签名 r gkmodp modqs H m xr d modqt kd modqreceiver通过计算验证这些签名 w t s modqu1 H m w modqu2 rw modq如果 r modp modq那么签名被证实 第三种DSA变体允许成批地验证 接收方成批地验证签名 如果都是有效的 则结束 如果某一个无效 接收方还得去找到这个签名 遗憾的是 这种方法不安全 签名者和验证者很容易生成一组伪造的签名来满足验证的标准 第四种变体是DSA素数生成的变体 即1 选择至少有160比特的任意序列 称之为S 令g是S的比特长度 2 计算U SHA S SHA S 1 mod2g 其中SHA是安全哈希算法 3 设置U的最高有效位及最低有效位均为1 形成q 4 检查q是否是素数 5 令p是q S C和SHA S 的并置链接 C被设置成32比特 并且全为0 6 p p pmodq 1 7 p p q 8 如果p中的C是0X7fffffff 那么转到步骤1 9 检查p是否是素数 10 如果是合数 则转到步骤7 关于这个变体 可以不必存储用于生成p和q的S和C的值 他们与p嵌在一起 对于应用 不需要大量的存储器 这一点很可贵 但这种模式是否降低了DSA的安全性 目前还不十分清楚 4 使用DSA生成 验证签名的实例这里介绍使用Java语言实现使用DSA生成 验证签名的一个例子 1 Java简介谈论Internet和Intranet或网络设备而不谈论Java是不可能的 似乎一夜之间Java成为建立网络化应用的标准平台 Java是一种通用的 并发的 基于类的 面向对象的程序设计语言 它被设计得足够简单以便许多程序员很容易使用它 Java是一种生产性语言而不是研究性语言 Java使用垃圾收集器技术自动地进行内存管理 避免不安全因素 Java程序设计语言和历史上任何其他程序设计语言相比被采用得最快 并且Java技术被大部分公司认作一个关键技术来支持平台独立存取广泛的协作资源 无疑 Java在软件开发者中越来越受欢迎 它对Internet和Intranet应用的开发和使用起到了革新的作用 它提供了一种新的 令人兴奋的面向对象的网络设计模型 这种模型易于理解 使用这种模型很容易地进行程序设计 Java取得了巨大的成功的另一个方原因是 用Java写一次程序 测试一次 然后可以到处运行 writeaprogramonce testitonce andthenrunitanywhere 而不需要考虑所用的硬件和操作系统 这可以实现在网络上软件 信息的共享和再利用 这个事实也蕴含一个潜在的优势 软件开发时间和成本的巨大节省 Java math BigInteger提供了任意精度的大数的模代数运算 如最大公约数计算gcd BigInteger 素数生成测试BigInteger intbitLength intcertainty Randomrnd 余数计算 指数运算modPow BigInteger 乘法逆元素运算modInverse BigInteger 使用这些方法进行程序设计是很方便的 这就是使用Java的优点之一 如果使用其他的程序设计语言 这些都要自己编程 Java安全API提供加密 信息融合 密钥管理 认证 存取控制和数字签名功能 允许开发者进行底层和高层的安全应用 2 使用DSA生成 验证签名的例子使用Java安全API 应用程序接口 为数据生成一个签名 并验证签名是真实的 步骤1准备初始化程序结构数字签名的方法是包括在java security的软件包中的 所以要输入来自于这个软件包的一切 还要输入java io软件包 因为它包括了输入文件数据所需要的方法 importjava io importjava security 步骤2生成公开密钥和秘密密钥为能生成签名 必须做的第一件事就是生成密钥对 秘密密钥和对应的公开密钥 密钥由随机数生成器生成 秘密钥用于生成数字签名 对应的公开钥用于验证签名 密钥对是通过使用KeyPairGenerator类来生成的 在这个例子中 为 DSA 算法生成一个公开的和秘密的密钥对 生成的密钥具有1024bit长度 生成一个密钥对步骤如下 1 创建一个密钥对生成器为DSA签名算法生成密钥的第一步是获得一个密钥对对象 KeyPairGeneratorKeyGen KeyPairGenerator getInstance DSA 2 初始化密钥对生成器所有的密钥对生成器都共享 强度 strength 和 随机数源 sourceofrandomness 的概念 KeyPairGenerator类中的方法initialize有两个类型变量 对DSA密钥对生成器强度Srength设置为1024 随机数源必须是java中的SecureRandom类的一个实例 简单的说 可使用SecureRandom的空的构造函数 这将自动的生成一个随机数生成器所需要的一个 种子 seed 值 KeyGen initialize 1024 newSecureRandom 3 生成密钥对 并在KeyPair类的实例中存储密钥KeyPairPair KeyGen GenerateKeyPair 步骤3对数据进行签名在生成秘密钥和公开钥之后 准备对数据进行签名 在这个实例中 将对文件中包括的数据进行签名 可以从命令行得到文件名 使用签名Signature类的例子生成数字签名 其签名步骤描述如下 1 得到一个签名对象 object 通过使用下面的语句可以得到一个使用DSA算法生成和验证签名的签名对象 Signaturedsa Signature getInstance SHA DSA 一般地 说明签名算法名称时 也应说明这个签名算法所使用的信息融合算法名称 DSA算法被定义使用SHA 1信息融合算法 SHA经常被参考成SHA 1算法 2 对签名对象进行初始化在签名对象能用于签名 或验证 之前 必须将它进行初始化 签名的初始化方法需要秘密密钥 可以从前一步生成的密钥对中抽取和使用秘密钥 PrivateKeyPriv Priv getPrivate Dsa initSign priv 3 给签名对象提供要签名的数据使用来自于文件的数据 对文件中的数据一次读一个byte 文件名是在第一个命令行中说明的 通过调用Updata方法把数据提供给签名对象 FileInputStreamfis newFileInputStream arg 0 Byteb While fis available 0 b byte fis read dsa updata b fis close 4 生成签名一旦把所有的数据提供给签名对象 就可以对数据生成数字签名 byte sig dsa sign 步骤4验证签名如果已经具有了经过数字签名的数据 通过使用Java中的Secuity就可以验证这个签名的真实性 验证签名需要以下三项内容 数据 签名和对应签名所使用的秘密钥的公开钥 使用签名Signature类的一个实例 Signature Signature GetInstance DSA 1 为了验证 首先对签名对象进行初始化签名对象在签名时进行过初始化 现在 为了验证 必须将它进行初始化 用于验证的初始化方法需要一个公开钥 可以从步骤2产生的密钥对中抽取和使用公开钥 PublicKeyPub pair getPublic dsa initVerify pub 2 给签名对象提供要验证的数据必须给签名对象提供要验证的数据 这个数据包括在文件中 文件名应是在第一个命令行变量中说明的 像步骤3一样 使用FileInputStream变量fis及byte变量b FileInputStreamfis newFileInputStream args 0 While fis available 0 b byte fis read dsa updata b fis close 3 验证签名一旦给出了签了名的对象 就可以正是这个签名的正确性 booleanverifies dsa verify sig System out println Signatureverifies verifies 7 报文摘要算法MD5简介在数字签名中 报文摘要或数字指纹是保证信息不被篡改的重要技术 从上世纪80年代到90年代 Rivest开发了好几种专有的报文摘要算法 包括MD MD2 MD5等 以1991年发表的MD5为例 是克服了MD4算法的安全缺陷的产物 数字指纹 的大小是128比特 1994年发表的一个研究报告称 可以花费1000万美元去制造一套专门的机器 针对MD5搜索两个不同的报文具有相同的摘要 即 碰撞 现象 平均用24天才能找到一次碰撞 目前 MD5被认为仍是一个安全和最常用的报文摘要算法 它可由任意长度的数据计算出一个128比特的MD5值 MD5是一种在加密软件中被用来单向变换用户口令和对信息签名的单向散列算法 一种单向散列的强度体现在他能把任意的输入随机化到什么程度并且能产生唯一的输出 对单向散列的直接攻击可以分为普通直接攻击和 生日 攻击 对MD5的普通直接攻击 所谓直接攻击又叫野蛮攻击 攻击者为了找到一份和原始明文m散列结果相同的明文m 就是H m H m 普通直接攻击 顾名思义就是穷举可能的明文去产生一个和H m 相同的散列结果 对MD5来说散列结果为128比特 就是说如果攻击者有一台每秒尝试1000000000条明文的机器需要计算约1022年 对MD5的生日攻击 生日攻击实际上只是为了找到两条能产生同样散列结果的明文 记得那个有名的概率生日问题吗 在N个人中至少有两个人的生日相同的概率是多少 所谓生日攻击实际上只是用概率来指导散列冲突的发现 对于MD5来说如果尝试264条明文 那么它们之间至少有一对发生冲突的概率是50 仅此而已 对当今的科技能力来说 它是不可能的 5 3DSA算法的改进1 改进算法DSA算法的安全性依赖于整数有限域上的离散对数问题的困难性 安全强度和速度均低于RSA算法 因此不少人对DSA算法提出了改进 下面介绍其中一种新的改进方案 NDSA NDSA签名方案中的参数选取同DSA 即 p L比特长的素数 其中L范围是从512比特到1024比特 并且要求是64的整数倍 在原始标准中p的尺寸固定的512比特 后来p的尺寸由NIST作了改变 q 160比特的数 并且要求是p 1的因子 g g h p 1 qmodp 其中h是小于p 1的任意数 并且h p 1 qmodp 1x 小于q的数y y gxmodp 前三个参数p q g是公开的 可以由一组网络用户共享 秘密密钥为x 公开密钥为y 签名时 先产生一个随机数k k q 签名方程 r gkmodp modqs k rH m x modq签名 r s 或 m r s 签名验证 为了验证 r s 的正确性 验证者先计算u1 smodqu2 rH m modq 然后验证方程 r 是否成立 成立则正确 否则不正确 2 改进算法 NDSA 的性能NDSA具有以下性能 1 无逆签名由一上签名和签名验证过程可见 使用NDSA无论是进行签名还是进行签名验证都无需求逆 是一个真正的无逆签名算法 该算法既提高了签名速度 又提高了验证速度 这一特点是DSA和以有些其他算法所不及的 2 多重签名由于DSA的特殊结果 利用它无法建立多重签名方案 而在DSA算法基础上能过实现多重签名方案 它可使任意n个签名人产生的n个签名组合成一个单一的签名 叙述如下 签名产生设共有n个签名人Ui i 1 2 n 每个签名人Ui计算并将ci对所有签名人公开 因此每个签名人Ui可计算 并将ci对所有签名人公开 因此每个签名人Ui可计算和si ki rH m xi modq即Ui关于m的签名为 ci si 多重签名设某人为n个签名人和签名收方之间的中间人 称其为组合者C 每个签名人Ui i 1 2 n 都将其关于m的签名送给组合者C 当C收到 ci si i 1 2 n 后 先计算 和在验证每个 ci si 是否满足 i 1 2 n 若对于所有的i上式成立 则 r s 便是Ui i 1 2 n 关于消息m的多重签名 C将 r s 发送给接收方 签名验证签名接收方受到 r s 后 先验证0 r q和0 s q是否成立 若成立 则计算 其中yi为Ui的公钥 u1 smodqu2 rH m modq然后验证方程 若方程成立 则签名验证通过 4 盲签名签名产生设签名人为A 签名验证者和消息拥有者为B A任选随机密钥k 计算 然后将发送给B B选随机数a b Zq 计算 B将盲消息送签名人A A利用签名方程求得部分盲签名后送B B再计算完成签名 为A关于盲消息的签名 为B给出的为消息m的签名 签名验证签名接收方得到签名 后 只有它们都满足验证方程才被通过验证 5 分批验证对签名进行分批验证就是签名验证人将某个签名人签名方程产生的关于n个不同消息的n个签名进行一次性验证 而不是逐个验证 从而提高其验证速度 在NDSA上可建立两种分批验证方案 它们可以防止除签名者以外的任何人对签名的伪造 也就是说 在假定签名人可信的情况下 NDSA分批验证方案是安全的 这两个分批签名验证方案介绍如下 方案1 签名方程 得到签名为 或 i 1 2 分批验证方程 如果方程成立 则n个签名验证通过 方案2 签名方程 i 1 2 n i 1 2 n 得到n个签名 i si i 1 2 n 分批验证方程 或如果验证方程成立 则签名验证通过 6 NDSA安全性分析伪造者要想从公钥y gxmodp求得x或先任选r再从r gs yrH m modp modq求部分签名s均等于求离散对数或比求离散对数还难 如果将y看作是n个签名人之公钥在模p下的乘积 则说明对于多重签名的伪造也是不可能的 5 4基于离散对数的若干新型代理签名方案代理签名是一种新型签名方案 由于这种签名机制在许多领域都有重要的应用 因此引起了人们的极大兴趣 代理签名的目的是当某签名人 这里称为原始签名人 因公务或身体健康等原因不能行使签名权力时 将签名权委派给其他人替自己行使签名权 目前 一些代理签名方案存在以下问题 1 代理签名方案在验证方程中仅含代理签名者的公钥 从而实际签名权和代理签名权没有实现有效地分离 2 授权方程的建立都是采用交互式传递数据的方法 而且不包含代理签名者的身份码 因此 授权方程的建立既烦琐 又使签名收方不易验证代理签名人的真实性 3 对代理签名而言 如何实现一个人同时受多人之托 进行代理多重签名 针对以上三点下面介绍一个新型代理签名方案和一个代理多重签名方案 1 代理签名方案的基本要求在一个代理签名方案中 如果假设 委托 进行代理签名 则此签名方案应满足以下三个最基本的条件 签名收方能够象验证 的签名那样验证 的签名 的签名和 的签名应当完全不同 并且容易区分 和 对签名事实不可否认2 新型代理签名方案安全参数 为大素数 为本原元 是单向函数 原始签名人 的公钥为 代理签名人 的公钥为 xB 1 1 且gcd xB 1 1 授权方程 当 打算将签名权委托给 时 选取随机数 1 1 并利用 的身份码IDB计算 gkmod 和 xA IDB mod 然后将 IDB 送 收到 IDB 后 先验证 以确认受委托数据源的可靠性 确认数据可靠性之后 再做如下计算 则 IDB 满足 上式成立的原因是 在这里为授权方程 它建立了 和 两者公钥之间的内在联系 而这种联系只有在 同意转让自己的权力时才可建立 其中 的签名密钥 只有 自己知道 其他人包括 也无法知道 代理签名 利用签名密钥 严格地说是利用代理签名密钥 的签名过程是 设 为待签名消息 为单向函数 计算及其中参数 1 1 为随机数 签名数据为cA B 签名验收 收方收到cA B 后 利用原始签名人 和代理签名人 的公钥计算 若 成 则收方接受 关于信息 的代理签名 容易证明 如果 是合法代理人 则上述 必定成立 因为尽管签名收方在验证签名时同时使用了两种公钥 可以明确原始签名和代理签名的关系 但当收方仍不放心 是否是真正的代理人时 可再采用如下交互式方法确认 是否知道授权方程中的 yB IDB 收方选 1 1 且gcd 1 1 ws签名收方可以确定代理签名人的合法身份及签名的有效性 性能分析 以前的代理签名方案在验证方程中仅含代理签名者的公钥 使得签名收方不易理解所收到的签名究竟是某人自己的真实签名 还是受人之托的代理签名 本方案克服了这一缺点 因为签名协议使得签名收方在验证时必须同时使用原签名人和代理签名人的公钥 即实际签名权和代理签名权实现了有效地分离 验证一个代理签名人是否具有签名权 主要是依靠原始签名人和代理签名人之间所建立的授权方程 而以前的授权方程的建立都是采用交互式传递数据的方法 而且不包含代理者的身份码 本方案对此进行了改进 授权方程包含代理签名人的身份码 而且在建立授权方程时 原签名人只需将有关数据直接传给自己所选定的代理人即可 这与人们日常委托他人办事的习惯十分相符 在确认签名有效性方面 本方案使签名收方可根据实际情况实施一次或两次验证 实现了双重安全保护机制 原始签名人 在给 授权时 可将关于 的身份码IDB的签名 IDB 公开地送给 如果除了 之外还有 通过某种渠道也获得了 IDB 当 想冒充 当代理签名人时 可能会计算 这时得到的授权方程是 而不是 若想将授权方程中的IDB改成IDG以得到合法的授权方程时 则会碰到求离散对数的难题 因此上述方案可抗击假冒代理人事件的发生 3 代理多重签名方案代理多重签名就是多个原始签名人将自己的签名权同时委托给 实施代理多重签名 其实现方案简述如下 有关安全参数的选取与上相同 这里不再赘述 设 i 1 2 是若干原始签名人 每个人的密钥 公钥和秘密参数为 xi yi ki 1 2 授权和签名过程为 每个 i计算ri gkmodp 并将ri在所有 i中公开 从而每个 i可计算 和 1 2 Ai将 IDB ri 送 1 2 将采用变成si得 IDB ri si 它满足方程 1 2 令 yG被看成 个原始签名人的群公钥 则代理签名的授权方程为 其中为 的代理多重签名密钥 既然 已经获得 其余的签名和验证过程与上述方案相同 5 5信息认证1 信息的完整性目前对于动态传输的信息 许多协议确保信息的完整性的方法大多是收错重传 丢弃后续包的办法 但黑客的攻击可以改变信息包的内容 所以应采用有效的措施来进行完整性控制 涉及到数据完整性认证的主要技术有 报文认证 与数据连路层的CRC控制类似 将报文名字段 或域 使用一定的操作组成一个约束值 称为报文的完整性检测向量ICV IntegratedCheckVector 然后将它和数据封装在一起进行加密 传输过程中由于侵入者不能对报文解密 所以也就不能同时修改数据并计算新的ICV 这样接收方受到数据后解密并计算ICV 若与明文中的ICV不同 则认为此报文无效 校验和 一个最简单易行的完整性控制方法是使用校验和 计算出该文件的校验和值并与上次计算出的值比较 若相等 说明文件没有改变 若不相等 则说明文件可能被未察觉的行为改变了 校验和方式可以查错 但不能改错 加密校验和 将文件分成小块 对每一块计算CRC校验值 然后再将这些CRC值加起来作为校验和 只要运用恰当的算法 这种完整性控制机制几乎无法攻破 但这种机制运算量大 并且昂贵 只适用于那些完整性保护极高的情况 消息完整性编码MIC MessageIntegrityCode 使用简单单向散列函数计算消息的摘要 连同消息发送给接收方 接收方重新计算摘要 并进行比较验证信息在传输过程中的完整性 这种散列函数的特点是任何两个不同的输入不可能产生两个相同的输出 因此 一个被修改的文件不可能有相同的散列值 单向散列函数能够在不同的系统中高效实现 防抵赖技术 它包括对源和目的地双方的证明 常用方法是数字签名 数字签名采用一定的数据交换协议 使得通信双方能够满足两个条件 接收方能过鉴别发送方所宣称的身份 发送方不能否认他发送过这一数据的事实 另外 实现防抵赖的途径还有 采用可信第三方的权标 使用时戳 采用一个在线的第三方 数字签名与时戳相结合等 2 报文认证信息认证的目的是防止信息被篡改 伪造 或信息接收方事后否认 特别对于某些开放环境中的信息系统来说 确保其认证十分重要 认证技术是现代各种计算机通信网络 办公自动化 电子资金转帐系统 自动零售服务网络等系统设计中的重要组成部分 今后 在IC卡应用系统中必将广使用 防止信息被篡改 保证信息的完整性 使得有意或无意的篡改了信息后接受者可以发现 其中最简单的为纯认证系统 它主要是针对来自进行信息验证双方以外因素的有意或无意的破坏 干扰等 而且必须建立在双方互相信赖的基础上 采用认证系统的关键在于防止认证码的破译 必须有良好的认证算法和密钥 它将信息通过密钥和某一特定算法进行加密后压缩成一个 报文摘要 附在信息之后 接受方收到信息和 报文摘要 后 用相同的密钥和算法对信息进行验证 如果信息被篡改 必然与所附 报文摘要 不符 可以及时发现 例如可用DSA算法做信息验证 如果信息过长 可用Hash算法先进行压缩 在进行验证运算 3 身份认证身份认证是网络中的主体进行验证的过程 用户必须提供他是谁的证明 他是某个雇员 某个组织的代理 某个软件过程 如股票交易系统或Web订货系统的软件过程 认证的标准方法就是弄清楚他是谁 他具有什么特征 他知道什么可用于识别他的东西 比如说 系统中存储了他的指纹 他接入网络时 就必须连接到网络的电子指纹机上提供他的指纹 这就防止他以假的指纹或其它电子信息欺骗系统 只有指纹相符才允许他访问系统 更普遍的是通过视网膜血管分布图来识别 原理与指纹识别相同 声波纹识别也是商业系统采用的一种识别方式 通常有三种方法验证主体身份 一是只有该主体了解的秘密 如口令 密钥 二是主体携带的物品 如智能卡和令牌卡 三是只有该主体具有的独一无二的特征和能力 如指纹 声音 视网膜或签字等 网络通过用户拥有的东西来识别的方法 一般是智能卡或其它特殊形式的标志 这类标志可以从连接到计算机上的读出器读出来 至于说到 他知道什么 最普遍的就是口令 口令具有共享秘密的属性 例如要是服务器操作系统识别要入网的用户 那么用户必须把他的用户名和口令送服务器 服务器就将它与数据库里的用户名和口令进行比较 如果相符 就通过了认证 可以上网访问 这个口令就由服务器和用户共享 更保密的认证可以十几种方法组合而成 例如用ATM卡和PIN卡 用于身份认证的主要方法有 主体特征认证 利用个人特征进行认证的方式极有很高的安全性 目前已有的设备包括 视网膜扫描仪 声音验证设备 手型识别器 这些识别系统能够检测如指印 签名 声音 零售图案这样的物理特征 但大多数这样的系统极具试验性 价格昂贵而且不是百分之百的可靠 任何一个送数据到远程系统去核实的系统有被搭线窃听的危险 非法入侵者只需记录下送去系统的校验信息 以后再重现这些信息 就能窃密 当然这也是标记识别系统的一个问题 口令机制 口令是相互约定的代码 假设只有用户和系统知道 口令有时由用户选择 有时由系统分配 通常情况下 用户先输入某种标志信息 比如用户名和ID号 然后系统询问用户口令 若口令与文件中的相匹配 用户即可进入访问 口令有多种 如一次性口令 系统生成一次性口令清单 第一次时必须使用X 第二次时必须使用Y 等等 还有基于时间的口令 即访问使用的正确口令随时间变化 变化基于时间和一个秘密的用户钥匙 这样的口令每分钟都在变化 使其更加难以猜测 智能卡 访问不但需要口令 也需要使用物理智能卡 在允许其进入系统之前检查是否允许其物理接触系统 智能卡大小如信用卡 一般有微处理器 存储器及输入 输出设施构成 微处理器可计算该卡的一个唯一数 ID 和其它数据的加密形式 ID保证卡的真实性 持卡人就可以访问系统 为防止智能卡遗失或被窃 许多系统需要卡和身份识别码 PIN 同时使用 若仅有卡而不知PIN码 则不能进入系统 智能卡比传统的口令方法进行认证更好 但其携带不方便 且开户费用较高 拨号回呼 CallBackModem 它是维护系统有效用户表及其相应电话号码的设备 当用户拨号进入系统时 系统得到用户的登录账户号后 挂起 再根据电话号码表向用户的设备拨入以验证其合法性 这种方法的优点是 限制只有电话号码存于系统中的人才是系统的用户 从而使非法侵入者不能从其家里拨入系统并登录 这一方法的缺点是限制了用户的灵活性 并仍需要使用口令 因为MODEM不能仅从用户固定发出拨号的地方 唯一地标识用户 一次性口令 即 询问 应答系统 一次性口令系统允许用户每次登录时使用不同的口令 它是用一种称作口令发生器的设备 设备是手携式的 并有一个加密程序和一个唯一的内部加密密钥 系统在用户登录时给用户提供一个随机数 用户将这个随机数送入口令发生器 口令发生器用用户的密钥对随机数加密 然后用户再将口令发生器输出的加密口令送入系统 系统将用户输入的口令 与它用相同的加密程序 密钥和随机数产生的口令比较 如果二者相同 允许用户访问系统 其优点是 用户可每次敲入不同的口令 因此不需要口令保密 只有口令发生器需要安全保护 为了增加安全性 有些系统甚至不需要联机保存密钥 实际的密钥可保存在有线连接于系统的一个特殊加密计算机中 在用户登录期间 加密计算机将为用户产生随机数和加密口令 这样一种系统的优点是 口令实际不许用户输入 系统中也不保存密钥 其不足之处类似于标记识别方法 每个用户必须携带口令发生器 如果要脱机保存密钥 还需要有一个特殊的硬件 4 远程用户访问资格确认装备了功能强大的便携机 远程工作的雇员可以访问到公司的所有东西 从电子邮件到公司日常运作的重要事务 包括销售人员的自动化工具和专用的客户和公司记录 信息系统 IS 的专业人员支持远程接入的安全性是至关重要的 主要是确保远程用户说谁就是谁 加强远程接入的安全性的最简单但效能最低的手段是使用静态口令 可以长时间内连续使用的单一口令 可惜 很多用户不是把口令写在明处 就是把口令编入通信软件中 防止非法侵入企业 组织机构网络的第一步便是识别进网用户 并确认只有合法用户可以进入受保护的系统 在ISDN网络中识别进网用户可通过ISDNCLI CallingLineIdentification 及Subaddress来实现 当远程用户用拨号方式进入 DiaUp 网络时 其访问资格可通过TACACS TerminalAccessControllerAccessControllerSystem 来鉴定 很多机构转向采用两因素认证和利用一次性口令的新软件标识技术 这些方法改善了安全性 精简了安全管理并降低了在快速扩大远程接入基础设施的造价 站在最终用户的角度 软件标识工作起来就像静态口令 但在软件标识之下实现了两因素认证和真正的一次性口令功能 最终用户必须做到全部事情只是拥有其计算机和记住他们的个人身份号码 最好的软件标识还可以采用附加的安全技术 确保有效的软件标识只在一个地方工作 即保证复制的软件不能工作 不管是安装前还是安装后复制均无效 下面介绍两种身份认证方案 5 基于ElGamal数字签名的身份认证方案1 ElGamal签名方案体制参数 p是一大素数 g是GF p 的生成元 签名人的私钥为x x p 相应的公钥为y gxmodp H是哈希函数 P g y为公开信息 签名过程 签名人任意选择一随机数k k p且gcd k p 1 1 并计算r gkmodp和s k 1 H m xr mod p 1 其中 m是待签名的消息 r s 为签名结果 验证方程 gH m yrrsmodp 2基与ElGamal签名的身份认证方案用户初始化用户为了获得自己的唯一的数字标识 必须先获得认证中心的签名 其过程如下 首先 每一用户Ui向认证中心提交自己的身份信息IDi 认证中心确认其身份之后 分别为每一用户计算si kH IDi rx mod p 1 其中 g p H是认证中心选择的体制参数 与上述的意义相同 x是认证中心的私钥 x p 相应的公钥为y gxmodp ki是认证中心选择的随机数 ki p且gcd ki p 1 1 然后 认证中心通过可靠的信道将 ri si 传送给用户Ui 用户Ui验证签名的合法性 认证方案用户Ui获得了认证中心的签名之后 便可以向任一其它用户Uj证明自己的合法身份 其步骤如下 1 用户Ui向验证人Uj发送 IDi ri 2 Uj收到 IDi ri 后 选择随机数e e p且gcd e p 1 1并计算 T gemodp 然后 将T传送给用户Ui 3 用户Ui收到T后 计算 4 验证人Uj验证下述方程是否成立 如成立 则可证明Ui确实是他所声称的用户 2 安全性分析 1 由签名方程si kH IDi rx mod p 1 我们可以知道 攻击者在不知道认证中心私钥的情况下 要想对签名方程进行某种替换是不可能的 否则验证方程将不成立 2 如果多个用户合作 企图从签名方程中求出认证中心的私钥x是不可能的 因为对于每一个用户 有不同的Ki 从而签名方程中有两个未知数x和Ki 因此x难于求出 3 攻击者若想根据公开信息 IDi ri y g p 以及验证方程来求出si 其困难程度相当于求解离散对数 4 攻击者可以截获T和V 但是他想从方程推出si 其困难程度相当于求解离散对数 5 攻击者可能在不知道si的情况下冒充合法用户Ui 他可以收集以往的认证信息 如 甚至还知道e1 但由于验证人每次选择的随机数都不相同 所以攻击者想通过验证的困难性不亚于求解离散对数 6 攻击者如果获取了Uj选择的随机数e 则他很容易构造出V 使得V满足验证方程 但是 他从T gemodp中推出e的困难程度却相当于求解离散对数 6 基于指纹的网络身份认证1 生物认证技术分析与比较现行的许多计算机系统 包括许多非常机密的系统 都是使用 用户 口令 的方法来进行用户的身份认证和访问控制的 其中必然应用了若干密码技术 密码技术在信息安全中处于核心地位 但由于现代密码学在理论上有着根本性的缺陷 它的应用实践无疑是有局限性的 而生物认证确定用户的身份是建立在用户提交的特殊的生理或行为特征的真实性之上的 所利用的生物特征先天地决定了一个人的身份特征 由于人的身体特征具有不可复制的特点 因此这些特征具有惟一性和稳定性 许多生理或行为特征每个人彼此不同 生物认证就必定在区分授权人和冒名顶替者方面比基于知识的和基于令牌的技术更加可靠 并且生物特征无须记忆 不会遗忘和丢失 因此 生物认证比基于知识的和基于令牌的身份认证技术更加安全和可靠 目前 大量生物特征识别技术或者是在广泛使用或者是在研究 已经有很多生物特征识别技术可用于身份认证 虽然指纹识别技术一般要求大量的计算资源 但目前的计算机系统性能完全可以满足这一要求 在网络环境下的身份
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- icu护士月度工作总结
- 2026春泰山版(新教材)小学信息技术四年级下册《数据收集有方法》同步练习及答案
- 密码编码学与网络安全(第五版) 向金海 06-公钥密码学与rsa
- 2026年新课标全国卷数学压轴题预测专题卷含解析
- 2026年秦皇岛市安全管理人员复习题库(附答案)
- 扩印洗印设备装配调试工操作安全测试考核试卷含答案
- 陶瓷工艺品制作师安全行为测试考核试卷含答案
- 碳五正异构分离装置操作工安全风险考核试卷含答案
- 钢水罐准备工岗前工作规范考核试卷含答案
- 保险保全员操作安全强化考核试卷含答案
- 2026年广东广州市中考模拟考试化学试卷(含答案)
- (正式版)T∕GDSTD 024-2026 广东省自然资源资产收储整备指南
- 知行合一 - 社会实践•创新创业智慧树知到答案2024年江西师范大学
- 《罗茨鼓风机》课件
- CPK-PPK分析报告模板
- 《大学生军事理论教程》第三章
- 流派第五章新凯恩斯学派
- 中海大海洋化学课件02海洋的形成和海水的组成
- 环境生态学2013课件 第三章:种群生态学
- Fanuc系统机床雷尼绍探头编程说明
- 新能源标准化场站建设过程及效果论析
评论
0/150
提交评论