2016-03-24 21 views
0

c) Pollard rho saldırısı kullanarak eliptik eğriler ayrık logrithm problemini çözmeye çalışıyorum. Hedef eliptik eğri, F2^113 ikili alanı üzerinden tanımlandığından, programımda çok miktarda EC_POINT_add işlemi yapmam gerekiyor. Ne yazık ki, EC_POINT_add her zaman 0 ve 7x (10^7) döngülerinden sonra program durur. İşte benim test kodum ve EC_POINT_add'nin her zaman 0'a ve 7x (10^7) döngülerinden sonra programın durmasına neden neden karıştığımı çok merak ediyorum. Bu sorun bana bütün hafta kafamı karıştırdığı için yardımına ihtiyacım var. Teşekkür ederim!openssl eliptik eğrileri: EC_POINT_add return error

/*X1 is a elliptic point, Tx,Ty,BL,c1,d1,c[i],d[i] and R[i] are BIGNUM* */ 
while(1) { 

    if(1 != EC_POINT_get_affine_coordinates_GF2m(curve,X1,Tx,Ty,ctx)) return 0; 

    BN_mod(Tx,Tx,BL,ctx); 
    i = atoi(BN_bn2dec(Tx)); 

    if(1 != EC_POINT_add(curve,X1,X1,R[i],ctx)) { 
      printf("\nb\n"); 
      return 0; 
    } 

    BN_mod_add(c1,c1,c[i],order,ctx); 
    BN_mod_add(d1,d1,d[i],order,ctx); 

    k++; 
    printf("%d ",k); 
} 
+0

Akış üzerinde yığın olabileceğini düşünüyorum, ancak bununla nasıl başa çıkacağımı bilmiyorum. – ybshen

cevap

0

Şimdi, kendi kodumda hata ayıklamasını bulduğumdan beri kendi sorumu yanıtlayacağım. Tüm olası hataları test ettim ve son olarak 'BN_bn2dec()' işlevinin dönüş dizisinin 'OPENSSL_free()' ile serbest olması gerektiğini keşfettim, aksi halde 2 * 10^8 döngülerinden sonra segmentasyon hatasına (çekirdek bırakılmış) yol açacaktır. .

BN_bn2hex() and BN_bn2dec() return printable strings containing the 
    hexadecimal and decimal encoding of a respectively. For negative 
    numbers, the string is prefaced with a leading '-'. The string must be 
    freed later using OPENSSL_free(). 

hatası bulmak için GDB hata ayıklayıcı kullandı: Burada belgelerin açıklaması var. GDB gerçekten kodları ayıklamak için yararlı bir araçtır.