公开密钥加密算法总是基于一个数学上的难题,比如RSA加密算法的安全性基于数论中大素数分解的困难性,所以,RSA需采用足够大的整数。因子分解越困难,密码就越难以破译,加密强度就越高。椭圆曲线加密算法的提出正好可以解决这个问题,其依据就是定义在椭圆曲线点群上的离散对数问题的难解性。
一、椭圆曲线加密算法
1、椭圆曲线基本协议
设椭圆曲线为E(Fq),在加法群中的阶为n,我们设点P0(1,1)为该椭圆曲线上的点,A和B为进行通信的双方用户。该椭圆曲线上的消息加密及解密协议如下:
设素数p和q满足q=p;A的公钥为点Pa=ka×P0,私钥为ka;B的公钥为点Pb=kb×P0,私钥为kb;m为消息。
(1)随机产生k,计算(x,y)=k×Pb;计算R=k×P0;计算c=m×x(modp);发送密文(R,c)->b。
(2)计算(x,y)=kb×R;计算m=c÷x(modp),m即为经由解密得到的明文。
2、椭圆曲线加密体制中的有关计算
作为公开密钥加密算法的一种,椭圆曲线加密体制要用到点乘、点加、模乘、模加、模逆、模幂这些基本运算,点加和点乘属于椭圆曲线群上的运算,它们的执行速度直接决定着椭圆曲线的加密速度。为了提高速度,可从采用高速算法或实现并行性两方面解决。
二、大数计算的典型算法
对于大数,大家比较关心的是整型数据类型,因此仅对整型数据类型部分展开讨论。
1、大数的常规运算的实现
对于加减法运算,通过将A、B按位对齐;低位开始逐位相加(减);对结果做进进(借)位调整即可实现。乘法运算引入sum2、sum1作为中间量;在n的每一位上处理m;通过每一层循环,实现乘法的加法化;对结果做进借位调整。出发运算则要引入al来标识a的长度,bl来标识b的长度;测算a和b的长度;从高位开始,对位做减法,并完成借位;然后高位开始逐位计算商并整理商,产生余数。余数也可作为取模的结果。
2、大数模乘算法
大数模乘算法在密码学领域有广泛的应用,它是公钥密码的基本运算。模乘一般表示为:C=(AB)modN,0≤A,B<N,其中A、B、N都为k比特二进制大整数。
以下是目前具有代表性的几种大数模乘算法:
(1)Blakley的加法型模乘算法
Blakley算法每次计算都对累加中间结果C进行模简化,以使结果小于N。Blakley算法不含乘法和除法,但加法法和模简化过程只能逐位处理,实现效率不够理想。针对Blakley算法,人们相继提出了不少改进方法,这些改进主要可分为二大类:减少乘法过程的加法次数,即减少乘数中非0个数;提高模简化速度等。F.E.Su和T.H.Wang于1996年提出了一种无需大数比较而直接将C限制在范围内的模简化方法,明显提高了效率。围绕减少加法次数,Koc利用窗口技术,通过以m位为一组结合冗余二进制数方法从右到左对乘数重编码和预计算,提出了窗口模乘算法。不久又出现了有符号滑动窗口模乘算法和无符号滑动窗口模乘算法,也是目前较为理想的加法型模乘算法。
(2)Knuth算法
Knuth算法的优点是将商计算转化为一个25位数与t位数的除法,由于算法中仍含除法,实现效率受影响较大。1987年Barrett提出了第一种无除法的估商型模乘算法,其基本思想是用乘法和预计算替代除法。Barrett算法的最大优点在于整个计算不含除法,仅用最基本的字乘和字加即可完成。1992年Quisquater提出了另一种估商型模乘算法,其特点是可快速进行商计算,后来Walter亦提出了类似的思想。Quisquater算法进一步简化了估商计算,但整个模幂过程中需附加一次归范化和反归范化计算。
(3)Montgomery算法
Montgomery算法采用模加右移法,避免了公钥加密中求模算法的除法运算,使运算量大为减少。Montgomery算法不含除法,基本运算为字乘和字加,通过剩余系转换方法计算模乘,极大地提高了模乘计算速度,被广泛应用于各种软硬件实现中,人们也从高效率、低空间、高安全等角度对算法进行了各种改进。Montgomery型算法最后都需对作一次条件减法,由于不同乘数所耗费的时间和能量不同,给时间攻击、能量攻击及电磁攻击留下了余地,为此Walter、Hachez和Quisquater通过深入研究,提出了一种可有效阻止这些攻击的Montgomery型无减法模乘算法,而且实现效率也相当理想。
3、大数分解
大数分解问题涉及到高可信度的计算问题及很多数学技术的进一步研究和运用,包括信息论,竞争的复杂性等。数论学者和计算机学者已经得到了许多实际有效的方法并已经引起人们的普遍关注。大数分解质因子问题涉及到了素数判别和大数分解两方面的内容。
而进行素数判别和大数分解最直接的方法就是试除法,即对于整数n来说,用2,…,n-1去试除,然后判定n是否素数,分解式是什么。作为最简单的一个方法,试除法对较大的数(20位左右)进行分解是要耗费很多时间。费马方法给定n,若n是两数平方差n=a2-b2,则n=(a+b)(a-b)是n的一个因子分解,但该方法只有当n有两个几乎相等的因子时,才比较快。
三、椭圆曲线加密的实现
encryptogram()//加密
{
inti;time_tt;
srand((unsigned)time(&t));
rando(p2);
intproduct〔301〕,quo〔301〕,arith〔201〕;
for(i=1;i<301;i++) product〔i〕=0;multiply(p1,p2,product);
rando(p3);
division(product,p3,quo,arith);
intp4〔101〕,prod〔301〕;
random(p4);
for(i=1;i<301;i++)prod〔i〕=0;
multiply(p4,arith,prod);
}
decryptogram()//解密
{
intpro〔301〕,qu〔301〕,arit〔201〕,q〔301〕,ari〔201〕;
for(i=1;i<301;i++)pro〔i〕=0;
multiply(p1,p2,pro);
division(pro,p3,qu,arit)division(prod,arit,q,ari);
return0;
}
小知识之加密算法
数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。 该过程的逆过程为解密,即将该编码信息转化为其原来数据的过程。
实操指南:如何监控聊天中的敏感信息?这款秘籍软件,轻松掌握微信聊天动态
电影《摩登时代》里,流水线工人就连在吃饭时都要用“自动喂食机”提高效率,这样才能挤出更多时间投入工作。虽然现在打工人不至于此,但有些老板仍然放心不下……像企业聊天记录往往蕴含着大量的敏感信息。为了确保信息安全,监控聊天中的敏感信息成为了一项必要且重要的工作。以下是一款秘籍软件,帮助你轻松掌握微信聊天动态,确保信息安全。...
怎么监控员工上班情况?2024企业管理的四种方法,老板们不容错过
怎么监控员工上班情况?2024企业管理的四种方法,老板们不容错过员工上班在干什么?摸鱼?打游戏?老板该怎么管理?如何才能监视怎么监控员工上班情况?监控员工上班情况可以通过多种方式实现,但重要的是要确保这些措施既合法又合规,同时尊重员工的隐私权。以下是一些建议的方法:一、制定明确的行为规范与奖惩制度1、制定行为规范: 企...
怎么监控员工上班情况?快速监控员工状态
怎么监控员工上班情况?快速监控员工状态在企业管理中,如何有效监控员工上班情况,确保工作效率与团队协作,是每位老板都需面对的课题。本文为您揭秘五招快速监控员工状态的实用技巧,不仅能帮助您实时掌握员工动态,还能提升整体管理效率。作为老板,掌握这些技巧,将让您在企业管理中游刃有余,轻松应对各种挑战。一、使用安企神软件实时监控...
安企神桌管软件:提升企业管理效率的全能助力
安企神桌管软件:提升企业管理效率的全能助力在当今竞争激烈的商业环境中,企业必须不断优化管理和运营流程,以提高效率和盈利能力。安企神桌管软件正是这样一款面向中小企业的管理工具,能够帮助企业在多方面提升综合管理水平。本文将详细探讨安企神桌管软件给企业带来的多重价值。一、全方位的管理功能安企神桌管软件是一款集成了多种管理功能...
安企神:揭开终端安全管理软件的神秘面纱
安企神:揭开终端安全管理软件的神秘面纱在数字化日益普及的今天,企业的网络安全问题愈发显得重要。数据泄露、网络攻击等事件层出不穷,如何保障企业内部信息的安全性成为众多企业关心的焦点。安企神终端安全管理软件应运而生,作为一款专业的安全管理工具,它的功能与优势备受关注。本文将全面揭秘安企神软件的核心功能、应用场景及其在终端安...