有限域上椭圆曲线点数schoof算法的python实现

pyschoof的Python项目详细描述


python3 schoof算法的实现有限域上的椭圆曲线和平方根的计算mod
p.*计算数学*,44(170):483–4941985。


椭圆曲线密码算法的安全保证基于所用椭圆曲线上的点数。由于naive
点计数是不可行的,因此拥有一个快速计数算法对于快速确定曲线是否可以安全地用于
加密非常重要。在有限域上椭圆曲线上点的Br/S>计数算法是
(渐近)最快[Soof - Ekky- AtKi] [海算法]计数
算法的基础。< BR/>< BR/>< BR/> *实现。** BR/>该实现是用[ Python 3 ] [pyt ]编写的。并尽可能保持简单。它的目标是在不使用高级概念的情况下洞察算法的数学。关于schoof算法的工作原理和方式的详细介绍,请阅读我的毕业论文
[*schoof椭圆曲线点计数算法的基本推导和实现][论文]。
在论文中,我试图解释*如何得到
算法*的思想。在数学中,人们常常忽略了对事物为何如此的理解。schoof的算法在椭圆曲线、有限域、多项式环和商环上使用算术。因此,这个存储库包含了所有这些概念的python模块,这些概念可以在它们自己的库中使用。




能够在所有常见的
平台上运行。要确定系统上是否已经安装了兼容版本的python,请在
终端中执行"python--version"。如果python可用,该命令将返回版本号。注意,版本3解释器也可以命名为
`python3`。请参阅python的
[文档][python使用]中的*使用python*部分,以获取系统安装说明;
按照以下步骤在您的帐户中本地设置python。




编译器;在linux和
unix系统上,几乎总是可以使用一个编译器。以下步骤
在linux系统上安装python:

**download.**从python网站
<;http://www.python.org/download/releases/>;下载3.1版或更高版本的源tar ballr/>`${home}/tmp/`,通过执行'mkdir${home}/tmp/`。切换到
临时目录并提取源tar ball:`cd
${home}/tmp/`然后提取`tar xzvf python-3.1.2.tgz`;相应地调整路径
和文件名。如果下载了bzipped source tar
ball,请改用"tar xjvf python-3.1.2.tar.bz2"。


下一步,转到包含提取的源代码的目录,例如`${home}/tmp/python-3.1.2/`。通过执行`./configure--prefix=${home}/python3`,配置构建
系统。
前缀是python安装根目录的路径,
因此请根据需要进行调整。如果缺少必需的组件,
命令将退出并显示错误消息。在这种情况下,请安装组件并重新执行"configure"。

如果一切正常,那么"configure"的最后一行输出将是"creating makefile"。要开始编译,请执行阿克。
**install.**编译完成后,使用"make install"安装python。
**set up environment.**若要启用本地python安装,请将其解释器和模块添加到相应的搜索路径:execute
`export path=${home}/python3/bin:${path}`要在其中找到"python3"解释器的shell;将路径调整为
"configure"的前缀。同样,执行"export
pythonpath=${home}/python3/lib/python3.1",告诉python在哪里找到它的模块。

因此,您必须
在每个新打开的终端中发出这两个命令,您希望
用于python 3.1程序。




程序执行
----


奥里。但是,他们希望有一个如上所述的设置python 3.1运行时环境。


使用更聪明的计算顺序
和hasse定理的常数更好的版本。用于计数的曲线被指定为
空间分隔的三元组*p*、*a*和*b*:*p*是
galois字段*gf[p]*的素数,*a*和*b*是曲线参数。

第i个参数*a=4*和*b=2*。如果终端中当前的
目录是存储库根目录,则
执行"python3 naive schoof.py 23 4 2"将产生输出

~下面描述的命令行选项,例如,允许从文件中读取曲线,或创建用于性能分析的执行配置文件。

*`--version`:显示程序的版本号和退出。
*`-h`,`--help`:显示帮助消息并退出。
*`-i`*f*,,`--输入文件=`*f*:从文件
*f*读取曲线参数。*f*中的行必须包含一个注释,或者a
以空格分隔的三个曲线参数*p*、*a*和*b*
注释行以散列(` `)开头;这些行和空行将被跳过。
*`-o`*f*、`--output file=`*f*:将结果写入文件*f*而不是显示结果的
在终点站。每一行输入生成一个相应的输出行。
*`-t`*s*,`--timelimit=`*s*:如果处理一个输入三元组花费的时间超过*s*秒,则终止程序。如果
时间限制过期,程序将结束;不会从输入
文件读取后续行。因此,将输入文件中的参数按长度升序排序,以避免过早触发时间限制。
*`-p`,`--create profile`:为每个处理过的输入三元组创建一个执行配置文件。配置文件由使用"cprofile"python模块生成的调用配置文件
和一个包含有关已用时间和已用内存的数据
的文件组成。
*`-d`*d*,`--profile directory=`*d*:如果使用
the`-p'标志启用配置文件,则收集的数据将写入目录
*D*。默认值是当前目录。



profiling tools
----


"tools/"目录包含多个程序,用于后期处理由set"-p"标志生成的配置文件。例如,它包括输出[callgrind][callgrind]文件的
调用配置文件转换器。使用
[kcachegrind][kcachegrind]交互检查callgrind文件。




解释了所有类的用途和用法。

此外,目录"test"包含单元测试,用于验证
正确的算法。单元测试设计为易于扩展
以进一步实现相同的对象。因此,新的
设计中的错误应该更容易定位。要运行单元测试,请在存储库根目录中执行
`python3-m\test'。




license
----


copyright(c)2010--2012 peter dinges<;pdinges@acm.org>;

此存储库中的软件是免费软件:您可以重新分发和/或修改它。根据自由软件基金会发布的GNU通用公共许可证条款,BR/>许可证的第3版,或者(按您的选择)任何以后的版本。
> BR>软件是分布式的,希望它是有用的,但是
没有任何保证;甚至没有IMPL。对
适销性或特定用途适用性的IED保证。有关详细信息,请参阅gnu
通用公共许可证。

您应该已经收到[gnu通用公共许可证][gpl3]
的副本以及此程序。如果没有,请参见http://www.gnu.org/licenses/>;



[api]:http://pdinges.github.com/python schoof
[callgrind]:http://valgrind.org/info/tools.html"callgrind是valgrind工具套件的一部分"
[gpl3]:http://opensource.org/licenses/gpl-3.0"GNU通用公共许可证,版本3"
[kcachegrind]:http://kcachegrind.sourceforge.net/html/home.html"用于callgrind文件的交互式查看器"。
[python]:http://python.org"python编程语言"
[python使用]:http://docs.python.org/py3k/using/index.html"python设置和使用"
[sea算法]:http://en.wikipedia.org/wiki/schoof%e2%80%93elkies%e2%80%93atkin嫒算法"有限域上椭圆曲线上计数点的schoof elkies-atkin算法"。
[论文]:http://www.elwedgeo.de/fileadmin/elwedgeo.de/portfolio/diploma嫒论文集数学/丁格斯小学推导论文集。pdf

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaFX进度条从单独的函数更改而来   jvm使用java服务器选项   java在<li>元素中查找同名的最后一个链接   java问题将参数传递给不同公共类中的构造函数   如何在php中从java函数中获取字符串   java如何在Android中动态显示多个tile   java仅使用Ribbon而不使用任何服务注册表是否可以实现负载平衡?   Jersey 1.19版本的java Swagger JAXRS出现“冲突URI模板”错误   带H2数据库的java Spring boot jpa   从12:00:00到00:00:00的日期转换   Android中的java如何设置文本?   java密钥库“不支持的保护参数”   http使用Java在Java中发送httprequest。净包   SpringJava刷新数据库   java在Spring Boot应用程序中使用嵌入式MongoDb和MongoTemplate失败   java需要什么MatOfMatch对象?   xml使用Java中的合并算法将两个值合并为单个值   java SQLite数据库不保存数据为什么不工作