ECC加密算法入门介绍
- 格式:docx
- 大小:63.19 KB
- 文档页数:15
ecc公钥数据结构摘要:1.引言2.ECC 公钥数据结构的定义3.ECC 公钥数据结构的优势4.ECC 公钥数据结构的生成和验证5.ECC 公钥数据结构在加密和解密中的应用6.总结正文:1.引言椭圆曲线密码学(Elliptic Curve Cryptography,简称ECC)是一种公钥加密算法,基于椭圆曲线上的数学问题。
与传统的RSA 和DSA 算法相比,ECC 具有更高的安全性和更小的密钥长度。
在现代密码学中,ECC 已经成为一种重要的加密技术。
本文将详细介绍ECC 公钥数据结构及其相关知识。
2.ECC 公钥数据结构的定义在ECC 中,公钥由一个椭圆曲线参数和一个基点组成。
椭圆曲线参数是一个三元组(a, b, n),其中a 和b 是椭圆曲线上的两个点,n 是一个固定的正整数,称为椭圆曲线的模数。
基点是椭圆曲线上的一个已知的点,用于生成其他点。
3.ECC 公钥数据结构的优势ECC 公钥数据结构具有以下优势:- 更高的安全性:由于ECC 基于离散对数问题,其安全性和RSA 相当,但密钥长度较短,使得攻击者需要更多的计算资源来破解。
- 更小的密钥长度:ECC 可以使用较短的密钥长度来实现相同的安全级别,这可以降低通信中的带宽和存储需求。
- 抵抗量子计算机攻击:与RSA 和DSA 相比,ECC 在面临量子计算机攻击时具有更高的安全性。
4.ECC 公钥数据结构的生成和验证椭圆曲线参数和基点的选择对于ECC 公钥的安全性至关重要。
通常,椭圆曲线参数由一个随机数生成器生成,而基点则由椭圆曲线参数生成。
在实际应用中,椭圆曲线参数和基点通常由权威机构发布,以确保其安全性和可用性。
验证公钥是否有效的方法主要包括以下两个步骤:- 确定公钥中的椭圆曲线参数和基点是否有效。
- 计算公钥中的私钥对应的另一个点,并验证该点是否在椭圆曲线上。
5.ECC 公钥数据结构在加密和解密中的应用在ECC 加密和解密过程中,公钥和私钥分别用于加密和解密数据。
ecc加密中,椭圆曲线点加法
椭圆曲线点加法是指在椭圆曲线上进行点的加法运算。
在ECC(椭圆曲线加密)算法中,点加法是指将两个点P和Q相加得到一个新的点R。
具体的点加法运算步骤如下:
1. 假设椭圆曲线方程为y^2 = x^3 + ax + b,其中a、b为常数,P、Q、R为曲线上的点。
2. 如果P和Q是同一个点,那么点加法的结果是将点P进行倍乘,即将点P与自身相加。
3. 如果P和Q不是同一个点,那么点加法的结果是找到曲线上与直线PQ相交的第三个点R,将点R的坐标作为点加法的结果。
4. 要计算R的坐标,首先需要求得直线PQ的斜率,然后使用该斜率与曲线方程联立求解求得R的坐标。
通过多次重复执行点加法运算,可以实现对消息进行加密和解密。
椭圆曲线点加法的特点是运算复杂度高,但安全性较高,适用于加密通信和数字签名等应用场景。
ecc算法c语言实现一、介绍ECC(Elliptic Curve Cryptography)椭圆曲线加密算法是一种公钥密码学,它利用椭圆曲线上的数学原理,实现了比传统RSA算法更高的安全性和更小的密钥长度。
ECC算法已经被广泛应用于移动设备、物联网等领域。
二、椭圆曲线基础知识1. 椭圆曲线方程椭圆曲线可以用如下的方程表示:y² = x³ + ax + b其中a和b是常数,x和y是变量。
这个方程描述了一个平面上的点集合,这个点集合形成了一个封闭的曲线。
2. 椭圆曲线上的运算在椭圆曲线上有两种运算:加法和乘法。
加法:两个不同点P(x1, y1)和Q(x2, y2)相加得到R(x3, y3),其中x3 = λ² - x1 - x2,y3 = λ(x1 - x3) - y1,λ = (y2 - y1) / (x2 - x1)乘法:将点P与一个整数k相乘得到另一个点Q,即Q = kP。
三、ECC算法实现步骤1. 寻找合适的椭圆曲线选择一个合适的椭圆曲线是ECC算法的第一步。
通常情况下,我们会选择一条已经被广泛使用并且被认为是安全的椭圆曲线。
2. 生成公私钥对在ECC算法中,公钥由椭圆曲线上的一个点P和一个整数n组成,私钥由一个整数d组成。
其中n是P点的阶(即nP = O),d是一个随机数。
3. 加密和解密加密:将明文M转换为椭圆曲线上的点P,然后选择一个随机数k,并计算C1 = kP和C2 = kQ + M,其中Q是接收者的公钥。
最终加密结果为(C1, C2)。
解密:接收到加密数据(C1, C2)后,用私钥d计算出Q = dP,并将C1乘以d得到C1' = dC1。
然后用C1'减去C2得到明文M。
四、ECC算法C语言实现以下是ECC算法在C语言中的实现代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#include <openssl/ec.h>#include <openssl/ecdsa.h>#include <openssl/obj_mac.h>int main(){// 生成公私钥对EC_KEY *key;key = EC_KEY_new_by_curve_name(NID_secp256k1);EC_KEY_generate_key(key);const EC_GROUP *group = EC_KEY_get0_group(key);const BIGNUM *priv_key = EC_KEY_get0_private_key(key); const EC_POINT *pub_key = EC_KEY_get0_public_key(key);// 显示公私钥char *priv_hex = BN_bn2hex(priv_key);printf("Private key: %s\n", priv_hex);char *pub_hex = EC_POINT_point2hex(group, pub_key, POINT_CONVERSION_UNCOMPRESSED, NULL);printf("Public key: %s\n", pub_hex);// 加密和解密unsigned char plaintext[] = "Hello world";size_t plaintext_len = strlen(plaintext);// 加密unsigned char ciphertext[128];size_t ciphertext_len;ECDSA_SIG *sig;do {sig = ECDSA_do_sign(plaintext, plaintext_len, key); if (sig == NULL) {printf("Error signing message\n");break;}int r_len = BN_num_bytes(sig->r);int s_len = BN_num_bytes(sig->s);if (r_len + s_len > 127) {printf("Error: signature too long\n");break;}memset(ciphertext, 0, sizeof(ciphertext));memcpy(ciphertext, sig->r, r_len);memcpy(ciphertext + r_len, sig->s, s_len);ciphertext_len = r_len + s_len;printf("Encrypted data: ");for (int i=0; i<ciphertext_len; i++) {printf("%02x", ciphertext[i]);}printf("\n");// 解密sig->r = BN_bin2bn(ciphertext, r_len, sig->r);sig->s = BN_bin2bn(ciphertext + r_len, s_len, sig->s);int verify_result = ECDSA_do_verify(plaintext, plaintext_len, sig, key);if (verify_result == 1) {printf("Decrypted data: %s\n", plaintext);} else {printf("Error decrypting data\n");}} while(0);// 释放资源EC_KEY_free(key);free(priv_hex);free(pub_hex);return 0;}以上代码使用了OpenSSL库中的ECDSA函数来实现ECC算法。
ECC算法的详细说明ECC(椭圆曲线密码学)是一种基于椭圆曲线数学的非对称加密算法。
它是公钥密码学的一部分,可以用于加密、数字签名、密钥交换等过程。
相比于其他非对称加密算法如RSA,ECC具有相同的安全强度下更小的密钥长度,对于资源受限的设备和网络通信而言具有更好的效率。
在ECC算法中,一个关键的概念是基点(base point),它是椭圆曲线上的一个点,用于生成其他点。
基点的选取是公开的,通常是一个事先确定好的固定点。
假设基点为G,可以通过连续重复点加法运算来获得其他点。
1.点加法:给定两个点P和Q,可以通过特定的算法将它们相加得到另一个点R。
点加法的规则是通过直线相交于曲线上的点求得R。
如果直线与曲线相交于两个点P和Q,那么R就是通过将P、Q关于x轴对称后的结果。
2.点倍乘:给定一个点P和一个整数n,可以通过连续重复的点加法运算将P倍乘n次得到另一个点Q。
点倍乘的规则是将点加法运算连续进行n次。
这个操作的结果是将点P相加n次得到Q。
3.密钥生成:ECC算法中的公钥由基点G和私钥d生成,公钥为Q=d*G。
私钥是一个随机生成的整数,范围在1到曲线上的一个恰当值之间。
通过点倍乘运算,可以将基点倍乘私钥得到公钥。
4.加密和解密:ECC算法可以用于加密和解密消息。
在加密过程中,公钥被用于将消息消息转换为曲线上的一个点,然后再将x轴坐标作为加密后的消息。
在解密过程中,私钥被用于找到加密点的y轴坐标,从而确定解密后的消息。
5.数字签名:ECC算法可以用于生成和验证数字签名。
在签名过程中,私钥被用于对消息进行加密,生成签名。
在验证过程中,公钥被用于验证签名的有效性。
ECC的数字签名具有不可伪造性和消息的完整性。
ECC算法的安全性基于离散对数问题,即在有限域上找到离散对数的困难性。
离散对数问题是指已知一个数的多次幂求解指数的问题,即已知y=g^x,求解x。
这个问题在大整数域上是计算上的NP问题,通常很难通过暴力破解或数学方法进行求解。
ecc椭圆曲线算法【实用版】目录1.椭圆曲线算法的概念与背景2.椭圆曲线算法的原理与过程3.椭圆曲线算法的优势与应用4.椭圆曲线算法的局限性与发展前景正文一、椭圆曲线算法的概念与背景椭圆曲线算法(Elliptic Curve Cryptography,简称 ECC)是一种基于椭圆曲线数学理论的公钥加密算法。
椭圆曲线研究可以追溯至十九世纪中叶,那时代数学家、几何代数学家以及数论专家都在研究这一领域。
椭圆曲线加密算法因其独特的数学特性,具备较高的安全性和效率,被广泛应用于网络通信、数据存储等领域。
二、椭圆曲线算法的原理与过程椭圆曲线加密算法的主要原理是基于椭圆曲线上的离散对数问题。
离散对数问题指的是在给定椭圆曲线上找到一个整数 k,使得 k*G=H,其中G 和 H 是椭圆曲线上的点。
由于椭圆曲线的特殊性质,这个问题比大数分解和离散对数问题更难解决,因此可以用来实现加密。
椭圆曲线加密的过程如下:1.选择一条椭圆曲线。
椭圆曲线的方程形式为:y^2 = x^3 + ax + b (其中 a、b 为常数),曲线的形状类似于一个椭圆。
2.选择一个基点 G。
基点是椭圆曲线上的一个已知的点,用于生成其他点。
3.生成密钥对。
每个用户生成一个私钥和公钥。
私钥是一个大整数 k (小于等于椭圆曲线的阶 n),公钥是基点 G 和私钥的乘积,表示为 K = k*G。
4.加密和解密。
在通信过程中,发送方将信息加密后发送给接收方。
接收方使用发送方的公钥 K 进行解密。
三、椭圆曲线算法的优势与应用1.安全性高。
椭圆曲线加密算法基于数学难题,其安全性较高,难以被攻破。
2.计算效率高。
相较于其他公钥加密算法如 RSA、离散对数算法等,椭圆曲线加密算法的计算量较小,可以更快地完成加密和解密任务。
3.应用广泛。
椭圆曲线加密算法广泛应用于网络通信、电子商务、数据存储等领域,如比特币等加密货币就是采用椭圆曲线加密算法进行加密。
四、椭圆曲线算法的局限性与发展前景虽然椭圆曲线加密算法具有较高的安全性和效率,但也存在一定的局限性。
ECC算法和加密应用大全(一)基本原理ECC(Elliptic Curves Cryptography)加密算法是一种公钥加密算法,与主流的RSA算法相比,ECC算法可以使用较短的密钥达到相同的安全程度。
近年来,人们对ECC的认识已经不再处于研究阶段,开始逐步进入实际应用,如国家密码管理局颁布的SM2算法就是基于ECC算法的。
下面我们来认识一下ECC的工作原理。
椭圆曲线定义在引入椭圆曲线之前,不得不提到一种新的坐标系-------射影平面坐标系,它是对笛卡尔直角坐标系的扩展,增加了无穷远点的概念。
在此坐标系下,两条平行的直线是有交点的,而交点就是无穷远点。
两者的变换关系为:笛卡尔坐标系中的点a(x,y),令x=X/Z,y=Y/Z,则射影平面坐标系下的点a 的坐标为(X,Y,Z),如点(2,3)就转换为(2Z,3Z,Z)。
椭圆曲线定义:一条椭圆曲线在射影平面上满足方程:Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3的所有点的集合,且曲线上每个点都是非奇异的。
该方程有名维尔维斯特拉斯方程,椭圆曲线的形状不是椭圆,只是因为其描述的方程类似于计算一个椭圆周长的方程。
转换到笛卡尔坐标系下的方程为:y2+a1xy+a3y = x3+a2x2+a4x+a6加法法则运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。
我们规定P+Q=R。
(如图)此处+不是简单的实数相加,是抽象出来的O∞+P=P,O∞为零元曲线上三个点A,B,C处于一条直线上,则A+B+C=O∞下面,我们利用P、Q点的坐标(x1,y1),(x2,y2),求出R=P+Q的坐标(x4,y4)。
P,Q,R'共线,设为y=kx+b,若P≠Q,k=(y1-y2)/(x1-x2)若P=Q,k=(3x2+2a2x+a4-a1y) /(2y+a1x+a3)解方程组得到:x 4=k2+ka1-a2-x1-x2;y 4=k(x1-x4)-y1-a1x4-a3;密码学中的椭圆曲线定义在有限域Fp中定义一个椭圆曲线,常用y2=x3+ax+bFp中只有p个元素,p为素数Fp中,a+b≡c (mod p),a×b≡c (mod p),a/b≡c (mod p)4a3+27b2≠0(mod p) a,b是小于p的非负整数x,y属于0到p-1间的证书,曲线标记为Ep(a,b)阶:椭圆曲线上一点P,存在正整数n,使得nP=O∞,则n为P的阶,若n不存在,则P是无限阶的,有限域上定义的椭圆曲线上所有点的阶都存在。
ecc算法公钥 -回复什么是E C C算法公钥(P u b l i c K e y)?E C C(E l l i p t i c C u r v e C r y p t o g r a p h y)算法公钥是密码学中一种非对称加密算法的组成部分。
非对称加密算法需要一个公钥和一个私钥来完成加密和解密的过程。
公钥用于加密数据,而私钥用于解密加密后的数据。
E C C算法公钥是由椭圆曲线上的一个点生成的,并且相对于传统的非对称加密算法而言,E C C算法具有更高的安全性和更小的密钥长度。
为了更好地理解E C C算法公钥,我们需要了解一些基础知识。
什么是椭圆曲线?椭圆曲线是一个具有一定数学性质的曲线,它由一些确定的数学公式所定义。
在密码学中,椭圆曲线具有一些独特的属性,使得它们成为构建非对称加密算法的可靠基础。
椭圆曲线的方程通常写为:y^2 = x^3 +a*x + b,其中a和b是定义曲线属性的常数。
E C C算法如何生成公钥?生成E C C算法公钥的过程可以分为以下几个步骤:1.选择一个合适的椭圆曲线:首先,需要选择一个合适的椭圆曲线作为E C C算法的基础。
这个曲线应该满足一定的数学特性,如安全性和计算效率。
常用的曲线类型有素数域曲线和二进制域曲线。
2.选择一个生成点:在选择椭圆曲线后,需要选择一个椭圆曲线上的点作为生成点(G e n e r a t o rP o i n t),通常用G表示。
这个点的特性是,通过不断重复相加这个点,可以得到曲线上的所有其他点。
3.选择一个私钥:私钥是一个随机生成的数值,通常表示为d。
它是一个介于1到椭圆曲线上点的阶数之间的整数。
4.计算公钥:通过私钥和生成点,可以计算得到公钥。
公式为Q=d*G,其中Q表示公钥。
E C C算法公钥的安全性如何?E C C算法公钥的安全性来自于椭圆曲线的困难问题,即椭圆曲线离散对数问题(E l l i p t i c C u r v e D i s c r e t e L o g a r i t h m P r o b l e m)。
ecc算法原理现在,随着信息社会的发展,数字信息在不断增多,安全性显得越来越重要。
为了保护数字信息,在安全通信系统中使用了加密算法,加密算法是安全通信系统中重要的一环。
在众多加密算法中,有一种称为椭圆曲线密码算法(ecc)的加密算法,简称为ecc算法。
椭圆曲线密码算法,也称为ECC,是比传统的大整数密码算法更安全的一种数字信封技术,它比RSA算法具有更高的安全性,更小的码字计算量,同时也拥有较高的算法效率,而且只需要双方持有相同的椭圆曲线参数才能安全通信,因此被认为是安全通信中最理想的算法之一。
下面我们来具体看看ecc算法的原理及其实现方式。
首先,ecc 算法涉及到离散对数问题,但是由于离散对数问题难以解决,因此ecc算法的实现需要利用椭圆曲线原理,即在保证算法安全的前提下,利用椭圆曲线上点的关系来构建数学关系,从而实现算法。
具体来说,在ecc算法中,密钥涉及到两个椭圆曲线,一个是发送者的椭圆曲线,一个是接收者的椭圆曲线。
在发送者的椭圆曲线上确定一个点P,在接收者的椭圆曲线上,也确定一个点Q,将P和Q 的坐标系中的点和点之间的曲线相乘,得到一个数字。
接收者用自己的私钥对此数字进行解密,计算出发送方发出的密文,再将密文扩散出去,以发出正确的信息。
这就是ecc算法的原理。
ecc算法具有传统数字密码算法不具备的高安全性、算法效率高、所需码字较少等优点。
有效利用ecc算法,可以实现安全的数字信封,有效地防止被窃取信息,为信息安全提供技术支持。
综上所述,ecc算法是一种具有更高的安全性、更小的码字计算量和较高的算法效率的加密算法,有效利用ecc算法可以实现安全的数字信封,为信息安全提供技术支持。
当前,ecc算法已经在数字金融、移动互联网、私人通信等多个领域得到了广泛的应用,大大提高了传输安全等级,受到各方的高度重视。
椭圆曲线密码算法(ECC)是一种非对称加密算法,它通过椭圆曲线上的点来实现密钥的生成与交换。
ECC的安全性与RSA等传统非对称加密算法相当,但它所需的密钥长度较短,使得它在移动设备等资源受限环境下具有明显的优势。
而椭圆曲线密钥生成算法就是ECC中用来生成密钥对的重要算法之一。
椭圆曲线密码算法的安全性建立在椭圆曲线离散对数问题的困难性上。
也就是说,在已知一个点P和整数kP的情况下,要很难计算出整数k。
这一性质使得椭圆曲线密码算法成为一种非常有前景的加密算法,因为相较于RSA等算法,可以用更短的密钥长度实现同等级的安全性。
椭圆曲线密钥生成算法的过程可以分为如下几个步骤:1. 选择椭圆曲线参数首先需要选择一个合适的椭圆曲线来作为公开参数。
这个椭圆曲线的选择直接影响到了密钥对的生成过程以及算法的安全性。
一般来说,椭圆曲线的安全性和性能是一对矛盾体,需要在其中寻找一个平衡点。
2. 生成私钥选择一个随机数作为私钥,私钥的大小通常是根据椭圆曲线的位数来确定的。
在ECC中,私钥通常是一个整数,它是生成公钥的重要参数。
3. 计算公钥利用椭圆曲线参数和私钥,可以通过一系列计算得到对应的公钥。
公钥通常是一个椭圆曲线上的点,它将被用于加密和数字签名等操作中。
4. 密钥对生成完成私钥和公钥组成了一个完整的密钥对,可以用于加密通信和身份认证等操作。
椭圆曲线密钥生成算法的实现涉及到大量数论和代数运算,其中包括模运算、点乘、椭圆曲线点加等复杂运算。
如何高效地实现这些运算对于算法的性能和安全性都有很大的影响。
椭圆曲线密钥生成算法是一种重要的非对称加密算法,它在移动设备、物联网设备等资源受限环境下具有明显的优势。
加之它在相同安全级别下所需的密钥长度较短,因此在当前信息安全领域有着广泛的应用前景。
椭圆曲线密钥生成算法(ECC)是当今信息安全领域中备受瞩目的一种加密算法。
其独特的数学原理和高效的计算性能使得它成为了许多安全通信协议和应用中不可或缺的一部分。
ECC加密算法入门介绍前言同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)也属于公开密钥算法。
目前,国内详细介绍ECC的公开文献并不多。
本文主要侧重理论,代码实现暂不涉及。
这就要求你要有一点数学功底。
最好你能理解RSA算法,对公开密钥算法有一个了解。
一、从平行线谈起。
平行线,永不相交。
没有人怀疑把:)不过到了近代这个结论遭到了质疑。
平行线会不会在很远很远的地方相交了?事实上没有人见到过。
所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。
既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。
即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。
给个图帮助理解一下:直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。
这就把直线的平行与相交统一了。
为与无穷远点相区别把原来平面上的点叫做平常点。
以下是无穷远点的几个性质。
▲直线L上的无穷远点只能有一个。
(从定义可直接得出)▲平面上一组相互平行的直线有公共的无穷远点。
(从定义可直接得出)(否则L1和L2有公共的无穷远点P,▲平面上任何相交的两直线L1,L2有不同的无穷远点。
则L1和L2有两个交点A、P,故假设错误。
)▲平面上全体无穷远点构成一条无穷远直线。
(自己想象一下这条直线吧)▲平面上全体无穷远点与全体平常点构成射影平面。
二、射影平面坐标系射影平面坐标系是对普通平面直角坐标系(就是我们初中学到的那个笛卡儿平面直角坐标系)的扩展。
我们知道普通平面直角坐标系没有为无穷远点设计坐标,不能表示无穷远点。
为了表示无穷远点,产生了射影平面坐标系,当然射影平面坐标系同样能很好的表示旧有的平常点(数学也是“向下兼容”的)。
标题:ECC加密算法入门介绍发信人:zmworm时间:2003/05/04 08:32pm详细信息:ECC加密算法入门介绍作者:ZMWorm[CCG]E-Mail:zmworm@主页:/前言同RSA(Ron Rivest,Adi Shamir,Len Adleman三位天才的名字)一样,ECC(Elliptic Curves Cryptography,椭圆曲线密码编码学)也属于公开密钥算法。
目前,国内详细介绍ECC的公开文献并不多(反正我没有找到)。
有一些简介,也是泛泛而谈,看完后依然理解不了ECC的实质(可能我理解力太差)。
前些天我从国外网站找到些材料,看完后对ECC似乎懵懂了。
于是我想把我对ECC的认识整理一下,与大家分享。
当然ECC博大精深,我的认识还很肤浅,文章中错误一定不少,欢迎各路高手批评指正,小弟我洗耳恭听,并及时改正。
文章将采用连载的方式,我写好一点就贴出来一点。
本文主要侧重理论,代码实现暂不涉及。
这就要求你要有一点数学功底。
最好你能理解RSA算法,对公开密钥算法有一个了解。
《近世代数基础》《初等数论》之类的书,最好您先翻一下,这对您理解本文是有帮助的。
别怕,我尽量会把语言通俗些,希望本文能成为学习ECC的敲门砖。
一、从平行线谈起。
平行线,永不相交。
没有人怀疑把:)不过到了近代这个结论遭到了质疑。
平行线会不会在很远很远的地方相交了?事实上没有人见到过。
所以“平行线,永不相交”只是假设(大家想想初中学习的平行公理,是没有证明的)。
既然可以假设平行线永不相交,也可以假设平行线在很远很远的地方相交了。
即平行线相交于无穷远点P∞(请大家闭上眼睛,想象一下那个无穷远点P∞,P∞是不是很虚幻,其实与其说数学锻炼人的抽象能力,还不如说是锻炼人的想象力)。
给个图帮助理解一下:直线上出现P∞点,所带来的好处是所有的直线都相交了,且只有一个交点。
这就把直线的平行与相交统一了。
为与无穷远点相区别把原来平面上的点叫做平常点。
以下是无穷远点的几个性质。
▲直线L上的无穷远点只能有一个。
(从定义可直接得出)▲平面上一组相互平行的直线有公共的无穷远点。
(从定义可直接得出)▲ 平面上任何相交的两直线L1,L2有不同的无穷远点。
(否则L1和L2有公共的无穷远点P ,则L1和L2有两个交点A、P,故假设错误。
)▲平面上全体无穷远点构成一条无穷远直线。
(自己想象一下这条直线吧)▲平面上全体无穷远点与全体平常点构成射影平面。
二、射影平面坐标系射影平面坐标系是对普通平面直角坐标系(就是我们初中学到的那个笛卡儿平面直角坐标系)的扩展。
我们知道普通平面直角坐标系没有为无穷远点设计坐标,不能表示无穷远点。
为了表示无穷远点,产生了射影平面坐标系,当然射影平面坐标系同样能很好的表示旧有的平常点(数学也是“向下兼容”的)。
我们对普通平面直角坐标系上的点A的坐标(x,y)做如下改造:令x=X/Z ,y=Y/Z(Z≠0);则A点可以表示为(X:Y:Z)。
变成了有三个参量的坐标点,这就对平面上的点建立了一个新的坐标体系。
例2.1:求点(1,2)在新的坐标体系下的坐标。
解:∵X/Z=1 ,Y/Z=2(Z≠0)∴X=Z,Y=2Z ∴坐标为(Z:2Z:Z),Z≠0。
即(1:2:1)(2:4:2)(1.2:2.4:1.2)等形如(Z:2Z:Z),Z≠0的坐标,都是(1,2)在新的坐标体系下的坐标。
我们也可以得到直线的方程aX+bY+cZ=0(想想为什么?提示:普通平面直角坐标系下直线一般方程是ax+by+c=0)。
新的坐标体系能够表示无穷远点么?那要让我们先想想无穷远点在哪里。
根据上一节的知识,我们知道无穷远点是两条平行直线的交点。
那么,如何求两条直线的交点坐标?这是初中的知识,就是将两条直线对应的方程联立求解。
平行直线的方程是:aX+bY+c1Z =0; aX+bY+c2Z =0 (c1≠c2);(为什么?提示:可以从斜率考虑,因为平行线斜率相同);将二方程联立,求解。
有c2Z= c1Z= -(aX+bY),∵c1≠c2∴Z=0 ∴aX+bY=0;所以无穷远点就是这种形式(X:Y:0)表示。
注意,平常点Z≠0,无穷远点Z=0,因此无穷远直线对应的方程是Z=0。
例2.2:求平行线L1:X+2Y+3Z=0 与L2:X+2Y+Z=0 相交的无穷远点。
解:因为L1∥L2 所以有Z=0, X+2Y=0;所以坐标为(-2Y:Y:0),Y≠0。
即(-2:1:0)(-4:2:0)(-2.4:1.2:0)等形如(-2Y:Y:0),Y≠0的坐标,都表示这个无穷远点。
看来这个新的坐标体系能够表示射影平面上所有的点,我们就把这个能够表示射影平面上所有点的坐标体系叫做射影平面坐标系。
练习:1、求点A(2,4) 在射影平面坐标系下的坐标。
2、求射影平面坐标系下点(4.5:3:0.5),在普通平面直角坐标系下的坐标。
3、求直线X+Y+Z=0上无穷远点的坐标。
4、判断:直线aX+bY+cZ=0上的无穷远点和无穷远直线与直线aX+bY=0的交点,是否是同一个点?三、椭圆曲线上一节,我们建立了射影平面坐标系,这一节我们将在这个坐标系下建立椭圆曲线方程。
因为我们知道,坐标中的曲线是可以用方程来表示的(比如:单位圆方程是x2+y2=1)。
椭圆曲线是曲线,自然椭圆曲线也有方程。
椭圆曲线的定义:一条椭圆曲线是在射影平面上满足方程Y2Z+a1XYZ+a3YZ2=X3+a2X2Z+a4XZ2+a6Z3 ----------------[3-1]的所有点的集合,且曲线上的每个点都是非奇异(或光滑)的。
定义详解:▲ Y2Z+a1XYZ+a3YZ2= X3+a2X2Z+a4XZ2+a6Z3是Weierstrass方程(维尔斯特拉斯,Karl Theodor Wilhelm Weierstrass,1815-1897),是一个齐次方程。
▲ 椭圆曲线的形状,并不是椭圆的。
只是因为椭圆曲线的描述方程,类似于计算一个椭圆周长的方程(计算椭圆周长的方程,我没有见过,而对椭圆线积分(设密度为1)是求不出来的。
谁知道这个方程,请告诉我呀^_^),故得名。
我们来看看椭圆曲线是什么样的。
▲ 所谓“非奇异”或“光滑”的,在数学中是指曲线上任意一点的偏导数F x(x,y,z),F y(x,y,z),F z(x,y,z)不能同时为0。
如果你没有学过高等数学,可以这样理解这个词,即满足方程的任意一点都存在切线。
下面两个方程都不是椭圆曲线,尽管他们是方程[3-1]的形式。
因为他们在(0:0:1)点处(即原点)没有切线。
▲椭圆曲线上有一个无穷远点O∞(0:1:0),因为这个点满足方程[3-1]。
知道了椭圆曲线上的无穷远点。
我们就可以把椭圆曲线放到普通平面直角坐标系上了。
因为普通平面直角坐标系只比射影平面坐标系少无穷远点。
我们在普通平面直角坐标系上,求出椭圆曲线上所有平常点组成的曲线方程,再加上无穷远点O∞(0:1:0),不就构成椭圆曲线了么?我们设x=X/Z ,y=Y/Z代入方程[3-1]得到:y2+a1xy+a3y = x3+a2x2+a4x+a6 -------------------------[3-2]也就是说满足方程[3-2]的光滑曲线加上一个无穷远点O∞,组成了椭圆曲线。
为了方便运算,表述,以及理解,今后论述椭圆曲线将主要使用[3-2]的形式。
本节的最后,我们谈一下求椭圆曲线一点的切线斜率问题。
由椭圆曲线的定义可以知道,椭圆曲线是光滑的,所以椭圆曲线上的平常点都有切线。
而切线最重要的一个参数就是斜率k。
例3.1:求椭圆曲线方程y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常点A(x,y)的切线的斜率k。
解:令F(x,y)= y2+a1xy+a3y-x3-a2x2-a4x-a6求偏导数F x(x,y)= a1y-3x2-2a2x-a4F y(x,y)= 2y+a1x +a3则导数为:f'(x)=- F x(x,y)/ F y(x,y)=-( a1y-3x2-2a2x-a4)/(2y+a1x +a3)= (3x2+2a2x+a4-a1y) /(2y+a1x +a3)所以k=(3x2+2a2x+a4-a1y) /(2y+a1x +a3) ------------------------[3-3]看不懂解题过程没有关系,记住结论[3-3]就可以了。
练习:1、将给出图例的椭圆曲线方程Y2Z=X3-XZ2和Y2Z=X3+XZ2+Z3转换成普通平面直角坐标系上的方程。
四、椭圆曲线上的加法上一节,我们已经看到了椭圆曲线的图象,但点与点之间好象没有什么联系。
我们能不能建立一个类似于在实数轴上加法的运算法则呢?天才的数学家找到了这一运算法则☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆自从近世纪代数学引入了群、环、域的概念,使得代数运算达到了高度的统一。
比如数学家总结了普通加法的主要特征,提出了加群(也叫交换群,或Abel(阿贝尔)群),在加群的眼中。
实数的加法和椭圆曲线的上的加法没有什么区别。
这也许就是数学抽象把:)。
关于群以及加群的具体概念请参考近世代数方面的数学书。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆运算法则:任意取椭圆曲线上两点P、Q (若P、Q两点重合,则做P点的切线)做直线交于椭圆曲线的另一点R’,过R’做y轴的平行线交于R。
我们规定P+Q=R。
(如图)法则详解:▲这里的+不是实数中普通的加法,而是从普通加法中抽象出来的加法,他具备普通加法的一些性质,但具体的运算法则显然与普通加法不同。
▲根据这个法则,可以知道椭圆曲线无穷远点O∞与椭圆曲线上一点P的连线交于P’,过P’作y 轴的平行线交于P,所以有无穷远点O∞+ P = P 。
这样,无穷远点O∞的作用与普通加法中零的作用相当(0+2=2),我们把无穷远点O∞ 称为零元。
同时我们把P’称为P的负元(简称,负P;记作,-P)。
(参见下图)▲根据这个法则,可以得到如下结论:如果椭圆曲线上的三个点A、B、C,处于同一条直线上,那么他们的和等于零元,即A+B+C= O∞▲k个相同的点P相加,我们记作kP。
如下图:P+P+P = 2P+P = 3P。
下面,我们利用P、Q点的坐标(x1,y1),(x2,y2),求出R=P+Q的坐标(x4,y4)。
例4.1:求椭圆曲线方程y2+a1xy+a3y=x3+a2x2+a4x+a6上,平常点P(x1,y1),Q(x2,y2)的和R(x4,y4)的坐标。
解:(1)先求点-R(x3,y3)因为P,Q,-R三点共线,故设共线方程为y=kx+b,其中若P≠Q(P,Q两点不重合) 则直线斜率k=(y1-y2)/(x1-x2)若P=Q(P,Q两点重合) 则直线为椭圆曲线的切线,故由例3.1可知:k=(3x2+2a2x+a4 -a1y) /(2y+a1x+a3)因此P,Q,-R三点的坐标值就是方程组:y2+a1xy+a3y=x3+a2x2+a4x+a6-----------------[1]y=(kx+b) -----------------[2]的解。