有限域上椭圆曲线点数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第三方库


热门话题
安卓为什么Java AudioEffect不支持双簧管?   增加内存后出现java IntelliJ堆大小错误   在unix/linux中工作的java中将unicode字符串转换为ASCII   java是否缺少正确对齐输出的值?   java Spring 3 MVC:动态表单中的onetomany(创建/更新时添加/删除)   java在接口中创建两个通用参数   lambda使用Java 8从嵌套列表中使用forEach查找项的替代方法是什么?   Java正则表达式匹配10位电话号码,中间有空格   linux将log4j外部化。使用命令行Java的属性文件   带有SSL的java简单RMI服务器   java无法为事务[…]打开JPA EntityManager无法获取驱动程序类“null”和URL“null”的连接   Android设备上的java Oauth Foursquare   for循环的ImageButton名称的java骰子模拟浓缩   java有没有简单的1d条形码阅读器?   如何在调用resultset后解决“无效字符串或缓冲区长度”。从java到访问mdb的getString()连接   在Java8中,是否可以使用JVM参数来控制何时(或在什么条件下)卸载类?