热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

ECC中计算倍点的两种方法

最近在看ECC的加密算法,该算法的安全性基于“求离散对数”的困难。下面主要介绍一下ECC在实现倍点过程中的算法,分为两部分:一是基于二进数的计算方法,二是基于NAF序列的计算方法。基于二

最近在看ECC的加密算法,该算法的安全性基于“求离散对数”的困难。下面主要介绍一下ECC在实现倍点过程中的算法,分为两部分:一是基于二进数的计算方法,二是基于NAF序列的计算方法。

基于二进数的计算方法中,分为两种遍历方式,一是从左向右遍历,二是从右向左遍历,该算法类似模幂运算中对于其指数的处理方式。具体算法如下。

ECC中计算倍乘的算法:现计算kP,k=(kt-1,kt-2,.....,k1,k0),PE(Fq)

算法1:从左向右遍历

输入:k=(kt-1,kt-2,.....,k1,k0),PE(Fq)

输出:Q=k P

Q←0(这里0指的是群运算中的单位元)

for i=0 to t-1

begin

  if ki=1 Q=Q+P

  P=2P

end

return Q

算法2:从右向左遍历

输入:k=(kt-1,kt-2,.....,k1,k0),PE(Fq)

输出:Q=k P

Q←0(这里0指的是群运算中的单位元)

for i=t-1 to 0

begin

  Q=2Q

  if ki=1 Q=Q+P

end

return Q

基于NAF序列计算点乘运算中也分为两种情况,一种是基于NAF2,一种是基于NAFw,下面先介绍一下NAF的定义,然后再介绍一下基于NAF计算点乘的算法。

标量的非相邻表示称为NAF

定义:一个正整数k的非相邻表示型是表达式,其中,并且没有两个连续的数字ki是非零的,NAF的长度是l.

NAF的性质:

1 k有唯一的NAF,并记作NAF(k)

2 NAF(k)k 的所有带符号表示中具有最少的非零位。

3 NAF(k)的长度最多比k的二进制表示的长度大1.

4 NAF(k)的长度是l,2l/3(l+1)/3.

5 所有长度为lNAF中非零数字的平均密度约为1/3.

计算一个正整数的NAF,算法如下:

输入:一个正整数k

输出:NAF序列

1. i←0

2. while (k≥1)

3.   if(k mod 2==1) ki←2-(k mod 4),k ←k-ki

4.   else ki=0

5.   k ←k/2,i ←i+1

6. return (ki-1,ki-2,....,k0)

用二进制NAF的方法计算点乘

输入:一个正整数k, PE(Fq)

输出:kP

1. NAF(k)=

2. Q←0(这里0指的是群运算中的单位元)

3. for i=l-1 to 0

4. begin

5.    Q←2Q

6.    if ki=1 Q ←Q+P

7.    if ki=-1 Q ←Q-P

8. return Q

窗口方法:即基于NAFw的计算方法。

可以利用额外的存储器,采用一次处理kw位的窗口方法,可以将算法的运行时间减小。

定义:令w≥2是正整数。正整数k的宽度为wNAF是表达式,其中每一个非零系数ki都是奇数,,,并且任何连续w个数字中最多1位非零。宽度为wNAF的长度是l

宽度为wNAF的性质:

1. k有唯一的宽度NAF,记作NAFw(k)

2. NAF2(k)=NAF

3. NAFw(k)的长度最多比k的二进制表示的长度大1

4. 在所有长度为l的宽度wNAF中,平均非零数字的密度近似为1/w+1

 

计算一个正整数的窗口宽度wNAF

输入:窗口宽度为w,一个正整数k

输出:NAFw(k)

1. i←0

2. k≥1时,重复执行

3.    if(k mod 2 ==1) then ki ←k mod 2w,k ←k- ki

4.    else ki ←0

5.    k← k/2,i ←i+1

6. return (ki-1,ki-2,.....,k1,k0)

 

计算点乘的窗口NAF方法

输入:窗口宽度w,一个正整数k, PE(Fq)

输出:kP

1. 计算NAFw(k)

2. 对于,计算Pi=i P

3. Q←0(这里0指的是群运算中的单位元)

4. for i=l-1 to 0

5. Q ←2Q

6.  if ki≠0

7.    if ki>0 Q ←Q+Pi

8.    else Q← Q-Pi

9. return Q



推荐阅读
  • HTTPS与TLS/SSL协议详解:握手及记录协议
    HTTPS,即HTTP over TLS/SSL,通过在HTTP通信层引入安全协议,确保数据传输的安全性。本文将深入探讨TLS/SSL协议的基本概念、HTTPS的必要性,以及TLS握手和记录协议的工作原理。 ... [详细]
  • Barbican 是 OpenStack 社区的核心项目之一,旨在为各种环境下的云服务提供全面的密钥管理解决方案。 ... [详细]
  • 应对.avast后缀勒索病毒:全面指南
    本文详细介绍了.avast后缀勒索病毒的特性、感染途径、恢复方法及预防措施,旨在帮助用户有效应对这一威胁。 ... [详细]
  • 探索古典密码学:凯撒密码、维吉尼亚密码与培根密码
    本文深入探讨古典密码学的基本概念及其主要类型,包括替换式密码和移位式密码。文章详细介绍了凯撒密码、维吉尼亚密码和培根密码的工作原理及加密解密方法。 ... [详细]
  • 地球坐标、火星坐标及百度坐标间的转换算法 C# 实现
    本文介绍了WGS84坐标系统及其精度改进历程,探讨了火星坐标系统的安全性和应用背景,并详细解析了火星坐标与百度坐标之间的转换算法,提供了C#语言的实现代码。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 初探Java编程:从入门到实践
    本文旨在为初学者提供Java编程的基础知识,涵盖程序、算法、流程图的概念,以及JDK环境的配置和Eclipse的使用方法。 ... [详细]
  • 本指南详细介绍了金仓数据库KingbaseES的安全威胁及应对措施,旨在帮助用户更好地理解和实施数据库安全保护。 ... [详细]
  • 深入解析SSL Strip攻击机制
    本文详细介绍了SSL Strip(一种网络攻击形式)的工作原理及其对网络安全的影响。通过分析SSL与HTTPS的基本概念,探讨了SSL Strip如何利用某些网站的安全配置不足,实现中间人攻击,以及如何防范此类攻击。 ... [详细]
  • Redis安全防护深入解析
    本文详细探讨了如何通过指令安全、端口管理和SSL代理等措施有效保护Redis服务的安全性。 ... [详细]
  • 本文深入探讨Java编程语言的关键特性,包括但不限于其简洁性、强大的面向对象能力、跨平台兼容性、安全机制、高效性能及多线程支持等方面。文章旨在为开发者提供全面理解Java特性的指导。 ... [详细]
  • Spring Cloud因其强大的功能和灵活性,被誉为开发分布式系统的‘一站式’解决方案。它不仅简化了分布式系统中的常见模式实现,还被广泛应用于企业级生产环境中。本书内容详实,覆盖了从微服务基础到Spring Cloud的高级应用,适合各层次的开发者。 ... [详细]
  • 在Java开发中,使用BASE64编码通常可以直接利用JDK内置的库。然而,在Android平台上,由于安全性和兼容性的考虑,直接引用JDK中的`sun.misc.BASE64Decoder`会导致错误,因此需要引入第三方库来实现相同的功能。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 探讨了在使用客户端JavaScript时,确保其完整性和来源可靠性的方法,特别是在安全性要求较高的应用中。 ... [详细]
author-avatar
小菜鸟
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有