博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Bristol的第24篇密码学
阅读量:5128 次
发布时间:2019-06-13

本文共 943 字,大约阅读时间需要 3 分钟。

密码学52件事

Number 24:描述一个二进制m组的滑动窗口指数算法。

简单回顾一下我们知道的。

大量的密码学算法的大数是基于指数问题的安全性,例如RSA或者DH算法。因此,现代密码学需要大指数模幂算法的有效实现。我们应该从一个简化的方案开始思考:计算\(x^a\mod N\),我们可以用指数算法来求\(x^a\),然后再约减到\(N\)。然而,对大多数密码算法来说,\(x^a\)都是非常大的。现在,大多数传统的方法能被简单的在每个阶段模\(N\)。这回产生一些改进的技术。下面我会介绍一些计算\(X^E \mod N\)可能的方法。

二进制算法

二进制模幂算法和传统的求幂的二次方方法非常像。实际上,唯一的不同就是我们把\(N\)表示成二进制形式然后计算。我们从左向右计算或者从右向左计算。

m-ary

m-ary方法也相似,但是它把指数看成位序列,然后把它们堪称\(M = 2^m\)的元素。实际上,二进制方法被认为是一种m-ary方法在\(M = 2\)时刻的情况。那么它如何工作呢?首先我们对所有的\(X^i\),其中\(i = 1\)\(2^m-1\),计算一个查找表。然后我们通过基于\(M\)的指数\(E\)的算法。然后我们每次计算的值只是才表中查找而不是移动m位。

这个方法和二进制算法进行比较,意味着我们能提前计算很多东西,然后做更少的乘法。

滑动窗口

因此,m-ary窗口会约减我们计算乘法的次数,但是我们可以做的更好吗?答案是对的。假设我们令\(m = 4\),同时\(E = 22 = (0,0,0,1,0,1,1,0)_2 = (1,6)_{2^4}\)。然后我们用4-ary算法,但是如果我们重新规定窗口大小的话,我们能做的更好:这里只有三个1,但是我们却用一个4-ary的算法。如果我们提前知道,我们就可以用我们的查找表来计算了,同时只需要一次查找。因此滑动窗口的话,我们首先对\(E\)做一个变换成\(E = \sum x_i2^i\)。这里让\(x_i\)尽可能是0。这回导致更多的预先运算,但是同时也提升了具体运算的效率。

参考

转载于:https://www.cnblogs.com/zhuowangy2k/p/10968504.html

你可能感兴趣的文章
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>
1076 Wifi密码 (15 分)
查看>>
noip模拟赛 党
查看>>