ristretto255对外API抽象及基于Curve25519的ristretto255层实现
1. API接口
ristretto255用于实现对cofactor不为1曲线的抽象,对外主要提供以下API接口:
- 1)“Encode”:将internal representations编码为bytestrings,使相同的ristretto255 element上所有相同的repsentations被编码为完全相同的bytestrings;
- 2)“DECODE”:将bytestrings解码为internal representations,且可对这些internal representations进行built-in validation,保证仅接受由有效ristretto255 elements编码的bytestrings;
- 3)“EQUALS”:对internal representations进行比对,对于相同ristretto255 element的不同internal representations表示,这些representations也被认为是等效的。
- 4)“FROM_UNIFORM_BYTES":为hash-to-group和random-point运算提供一致的映射关系(由bytestrings到ristretto255 elements)。
以上提到的internal representations为elliptic curve points,所以内部的group element 加/减/scalar乘法运算可转换为对ellptic curve points的加/减/scalar乘法运算。
这个group运算需要用到Curve25519的Edward curve特性。
/// edwards.rs文件中注释:
Group operations for Curve25519, in Edwards form.
ristretto255抽象层对性能的损耗很小,个别特定的操作(如EQUALS
)的运行性能甚至优于底层使用elliptic curve points的运算性能。
2. ristretto255 element
ristretto255 group element为prime order group element的抽象。
- “element encoding”为对一个ristretto255 group element(以下简称group element)的编码(该编码唯一且可逆的);
- “internal representation”为实现ristretto255的ellptic curve上的一个point。
每个group point可以有多个等效的internal representations。(即可满足cofactor不为1的曲线。)
ristretto255 group element以扩展坐标系(x,y,z,t)形式表示。
3. 基于Curve25519的ristretto255层实现
当把Curve25519 points作为internal representation时,具体的ristretto255 group实现细节如下:
Curve25519具有order—— l = 2 252 + 27742317777372353535851937790883648493 l=2^{252}+27742317777372353535851937790883648493 l=2252+27742317777372353535851937790883648493。
ristretto255为prime order group,其中的每个element均可作为generator,但是为了互操作性便利,会选择一个经典的generator——该generator对应的为Curve25519的basepoint,以便于复用现有scalar multiplication的precomputation。这个经典的generator的编码对应为:
e2f2ae0a 6abc4e71 a884a961 c500515f 58e30b6a a582dd8d b6a65945 e08d2d76
参考资料:
[1] https://eprint.iacr.org/2015/673.pdf
[2] https://tools.ietf.org/pdf/draft-hdevalence-cfrg-ristretto-01.pdf
[3] https://ristretto.group/ristretto.html
[4] https://github.com/dalek-cryptography/curve25519-dalek
[5] https://mp.csdn.net/mdeditor/94566837#
ristretto255对外API抽象及基于Curve25519的ristretto255层实现相关推荐
- 对外API接口的安全性设计及鉴权方式
对外API接口的安全性设计及鉴权方式 API鉴权方式 API Key + API Secret实现API鉴权 Cookie + Session实现API鉴权 token机制实现API鉴权 API接口的 ...
- JWT的API鉴权,基于拦截器的token与鉴权
基于JWT的API鉴权 基于拦截器的token与鉴权 如果我们每个方法都去写一段代码,冗余度太高,不利于维护,那如何做使我们的代码看起来更清爽呢?我们可以 将这段代码放入拦截器去实现 Spring中 ...
- ArcGIS JS API 4.X实现动态地图服务子图层显隐控制
ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 文章目录 ArcGIS JS API 4.X实现动态地图服务子图层显隐控制 使用场景 官网示例 注意事项 使用场景 图层控制功能 官网 ...
- DL之DNN:基于神经网络(从1层~50层)DNN算法实现对非线性数据集点进行绘制决策边界
DL之DNN:基于神经网络(从1层~50层)DNN算法实现对非线性数据集点进行绘制决策边界 目录 输出结果 设计代码 输出结果 设计代码 首先查看数据集 import numpy as np from ...
- mysql的数据层基类_C# 基于MySQL的数据层基类(MySQLHelper)
using System; using System.Data; using MySql.Data; using MySql.Data.MySqlClient; namespace DBUtility ...
- 基于单片机的八层电梯设计
设计简介: 本设计是基于单片机的八层电梯设计,主要实现以下功能: ①可实现通过内机按键和外机按键控制电梯到达楼层 ②可实现通过一个四相步进电机控制电梯升降,另一个四相步进电机控制电梯开关门 ③可实现通 ...
- 【单片机毕业设计】【mcuclub-jj-003】基于单片机的八层电梯的设计
最近设计了一个项目基于单片机的八层电梯系统,与大家分享一下: 一.基本介绍 项目名:八层电梯 项目编号:mcuclub-jj-003 单片机类型:STC89C52.STM32F103C8T6 功能简介 ...
- 基于单片机的六层电梯设计
设计简介: 本设计是基于单片机的六层电梯设计,主要实现以下功能: ①可实现通过内机按键和外机按键控制电梯到达楼层 ②可实现通过一个四相步进电机控制电梯升降,另一个四相步进电机控制电梯开关门 ③可实现通 ...
- 基于MCGS的六层电梯控制
基于MCGS的六层电梯控制 利用MCGS组态软件进行六层电梯的仿真模拟监控界面设计,需实现电梯轿厢的上下运行显示,内呼选层控制和外呼按钮控制,电梯轿厢开关门显示等,需界面形象逼真,能够实现内外呼申请控 ...
最新文章
- 3-flutter 项目结构 资源 依赖
- python 文件名相关
- 十四、H.264的变换编码(一)——矩阵运算与正交变换基本概念
- Go 开发关键技术指南 | 敢问路在何方?(内含超全知识大图)
- 光纤交换机的配置 光纤交换机的由来是什么
- 11-Flutter移动电商实战-首页_屏幕适配方案和制作
- 适用于zTree 、EasyUI tree、EasyUI treegrid
- package 和 install的区别
- nginx一键安装脚本
- linux输入法小结
- hdu 1316 斐波那契数
- 《数据库系统概念》20-恢复系统
- iOS开发,自定义字体,字体名称查询
- 2022Java最新学习路线(初学者必看)
- python智能推荐系统教程_最新Python黑马头条推荐系统项目视频教程(精讲)
- linux下看学校的IPTV
- 如何利用 composer 替换第三方包里的某个类(color-thief-php为例)
- MD-Pandoc进阶教程:图表、文献和目录
- stm32-mini-LCD液晶显示实验
- c语言 宏do while,关于C语言宏定义 使用do{ xxxx }while()