2013-03-16 5 views
2

프라임 필드의 타원 곡선에서 점 빼기를 수행하려고합니다. (x,-y log(p))으로 빼기 위해 포인트를 가져 가려고했지만 내 대답이 일치하지 않는 것 같습니다. 여기타원 곡선 암호화에서 포인트 빼기

s9=point_addition(s6.a,s6.b,((s8.a)%211) ,-((s8.b)%211)); 

s9, s6s8int 모든 구조입니다 :

이 내가 뺄셈을 시도하는 방법이다.

structure point_addition(int x1, int y1, int x2, int y2) 
{ 
    int s,xL,yL; 
    if((x1-x2)!=0) 
    { 
     if ((((y1-y2)/(x1-x2)) % 211)>0) 
       s=(((y1-y2)/(x1-x2)) % 211); 
     else 
       s=(((y1-y2)/(x1-x2)) % 211) + 211; 
     if ((((s*s)-(x1+x2)) % 211)>0) 
       xL= (((s*s)-(x1+x2)) % 211) ; 
     else 
       xL= (((s*s)-(x1+x2)) % 211) + 211; 
     if(((-y1+s*(x1-x2)) % 211)>0) 
       yL= ((-y1+s*(x1-xL)) % 211); 
     else 
       yL= ((-y1+s*(x1-x2)) % 211) + 211; 
    } 
    else 
    { 
     xL= 198 ; 
     yL= 139; 
    } 

    s7.a= xL; 
    s7.b= yL; 

    return s7 ; 
} 

프로그램이 타원 곡선 암호에 대해이 코딩 제발 도와주세요 저에게 정확한 좌표를 제공하지 않는 것 :

은이는 포인트 추가하지 내 기능입니다.

+0

당신이 수행하는 언어에 태그를 잊지 마세요 Jowin에서의 계산,보기 수를 늘리는 경우에만. 나는 C를 추측했으나 질문을 다시 편집하여 변경할 수 있습니다. –

+0

Jowin, "division"mod p는 [모듈 형 역수] (http://en.wikipedia.org/wiki/Modular_inverse)를 계산해야 함을 의미합니다. 's = (((y1-y2)/(x1-x2)) % 211)'은 올바른 방법이 아닙니다. –

+0

그렉, 모듈 식 역 방법으로 나눗셈을 할 수 있도록 코드를 편집해야한다는 것을 알았지 만, 정규 나눗셈으로도 궁금하다. 내가 얻은 모든 점은 타원 곡선에 있었다! ... 답장을 보내 주셔서 감사합니다! 그리고 내 프로그램에서 나는 타원에 대해 무한 점을 고려해야 만한다. –

답변

2

division mod p에 대한 GregS의 의견을 참조하십시오. 분모의 역함을 찾아서 곱해야합니다. 모듈 형 역행렬을 계산하려면 확장 된 유클리드 알고리즘을 사용할 수 있습니다.

또한 y 좌표를 부정하는 방식으로 나중에 211을 더하는 것이 약간 이상합니다. 인수로 전달할 때 필드 요소를 적절한 범위에 유지하는 것이 가장 좋습니다. -y mod p를 얻으려면 p-y를 사용하십시오.

그리고 나는 이것이 당신이 매우 작은 필드 :

+0

좀 더 자세히 설명해 주시겠습니까? p-y가 내 프로그램에서 -y mod (p)를 대체 할 것으로 생각하는 것 같습니다. 내가 틀렸다면 수정하십시오. –

+0

예, 귀하의 경우에는 괜찮다고 생각합니다. 나는 단지 같은 필드 요소의 다른 표현을 사용하는 것이 문제를 요구하고 있다고 말하고있다. point_addition에 x1 =210 및 x2 = -1을 전달했다고 가정 해보십시오. if ((x1-x2)! = 0)가 작동하지 않습니다. – Frank

1

내가 이해 돈`t 정확히이 무엇을하고 있는지, 뜻 어떤 로그 (p)를 사용하고 있기 때문에 그냥 학습 운동을 가정 도메인 매개 변수는 입력하지만 뺄셈은 쉽습니다. y 좌표 (-Y = 모듈 - y)를 무효로하고 평소와 같이 평범하게 추가하십시오. 당신이 당신의 계산에 대한 참조를 원하는 경우

, 당신은 그것의 계산에 매우 투명하고, 예를 들어 생산 this link 에서 내 오픈 소스 소프트웨어 "학술 서명" 를 사용할 수 있습니다 사람이 읽을 수있는 16 진수 표기법의 ECDSA 서명 결과 나는 그 순간에 당신이 작업하고있는 그러한 짧은 모듈을 가지고 계산을 할 수 있는지 확신 할 수 없다.

제대로하는 방법과 소프트웨어를 사용하는 ECC-작업을 프로그래밍하는 방법에 대한 설명을 특징으로 매뉴얼이있다 : Link to ecc Manual

감사 마이클 앤더스

+0

답장 Michael에게 감사드립니다. 내가하려는 것은 c : http : //www.dkrypt에서 다음과 같은 튜토리얼을 구현하는 것이다.co.kr/home/ecc p는 타원 곡선 방정식 {y2 mod p = x3 + ax + b mod p}의 p이며 프로그램을 다운로드하면 프로그램에서이를 찾을 수 있습니다. 1 주어진 타원 곡선 방정식 y^2 mod (211) = (x^3 - 4) mod (p) 개인 키는 4이고 생성자 점은 (2, 2)입니다. 0 ~ 200의 숫자가 곡선에 매핑됩니다. 튜토리얼 및 보낸 4,5,6은 암호화 된 지점과 decypted 포인트를 말할 수 전송됩니다 –

관련 문제