ALGORITMA ECC
Algadfma A.
Pembsatan Parameter Domain
Input: Suatu
F,
,
FR,
tingkat keamanan L memenuhi 160
<
L <
LlogZpJ
clanf > _ 4
&
Output:
Parameter-parameter domain D
=@,
Fq
S,
a,
b, P, n, h)
1.
Pilih
a,
b
EFp secara random dengan menggunakan Algoritma
C
untuk
kurva eliptik E, yaitu
9
=x3
+
mc
+
b.
2. Hitung
N =
#E(F,).
3.
Periksa bahwa N dapat dibagi dengan suatu prima besw
n
yang
memenuhi
n
>
2L.
Jika tidak, maka ke langkah 1.
4.
Periksa bahwa n
tidak
membagi
pk-
1 untuk 1
<
k
<
20. Jika tidak,
maka ke langkah 1.
5.
Periksa bahwa
n
# p .
Jika tidak, maka ke langkah I .
6.
Buat h
t
Nln.
7 .
Pllih sembmng titik
P'
EE(Fp) d m buat P
=hhP
'.mgi
w
p
a
i
P
#03.
8.
Hasilnya
(p,
a,
B, P,
n,
h).
Algoritma
B.
Validasi Eksplisit dari Parameter Domain.
Input: Set parameter domain D
=@,
a,
b,
P,
n,
h)
Output:
Penerimaan atau penolakan validasi D
1.
Periksa bahwap adalah prima.
2.
Peiksa baliwa
a, 6,
xp, y p(dimana
P i x ,
y)) addah elemen-elemen
dari
F,.
3.
Periksa bahwa
a
dan b meridefinisikan matu kurva eliptik atas
F,
(yaitu,
&
+
27b2
#0
untuk fapangan-lapangan denganp
>
3).
4.
P&sa bahwa
P
;t co5. Periksa bahwa
P
memenuhi persamaan kurva eliptik ynag
dideflnisikan oleh a d m b
6.
Periksa bahwa n adalah prima, bahwa n
>
2I6Od m bahwa
n
>
4&.
7.
Periksa bahwa
nP
= m.8.
Hitung
h'
=k&
+
I ) ~ / ~ J
dan periksa bahwa
h
=h'.
9.
Periksa bahwa
n
tidak membagi
qk-
1 untuk
1<
k < 20.
10. Periksa bahwa n t p .
11.
Jika beberapa pemeriksaan gagal maka hasilnya ("Invalid"); lainnya
("Valid").
Algoritma C. Pembuatan Kuwa Eliptik Random atas
Fp
Input: Suatu primap, dan hngsi
hash
1-bit H
Output: Sebuah seed
S dengan ukuran minimal 160 bit, dan
a,
b
GFp
mendefinisikan suatu kurva eliptik
E:
yz
=2
+
ax
+
b
1.
~ ~ ~ t t t r 1 0 ~ ~ l , ~ t r ( t - 1 ) 1 t 1 , ~ t t t ~ 1 .
2. Pilih sembarang string bit
S
dengan panjang g
21
bit.
3.
Hitung
h
=H(S), d m misalkan r o adalah string bit dengan panjmg
v
bit
yang diperoleh dengan menggunakan bit-bit paling kanan
v
dari h.
4.
Misalkan
Ro
adalah string bit yang diperoleh dengan meletakkan bit paling
kiri
YOke 0.
5.
Misalkan z adalah intejertepresentasi biliernya adalah
S.
6.
Untuk
i
=1
ke
smaka:
6.1 Misalkan
s,
adalah representasi bner g-bit dari intejer (z
+
i)
mod
Zg.
6.2
Hitung
Ri
=H(si).
7.
Misalkan
R
=&
11
RI
11
...
(1
R,.
8.
Misdkan
r
adalah intejer yang representasi binemya adalah
R.
9.
Jika
r
=0 atau jika
4v
+
27
-=0 (modp)
maka
ke langkah
2.
10. Pilih sembarang
a,
b
EFp
,
a, b
it0, sehingga
r .
b2 =
d
(modp).
1
1. Hasilnya (S,
a,
b).
Algoritma
D.
Pemeriksaan Kurva Eliptik Random atas
F,
Input: Prima p
>
3,
fungsi hash
H,
seed
S
dengan panjang bit
g
>-
1, dan
a,
b
GOutput:
Penerimaan atau penolakan bahwa E dibuat menggunakan algoritma
C.
1 .
~ ~ ~ t t t r ~ ~ ~ ~ ~ l , ~ t r ( t - i ) / i 1 , ~ t t t ~ z .
2.
Hitutig h
=H(S),
d m misalkan
ro
adalah string bit dengaa panjang
v
bit
yang diperoleh dengan menggunakan bit-bit paling
kanan v
dari
h.
3.
Misalkan
&,
adalah string bit yarig diperoleh dengm meletakkan bit paling
kiri
ro ke
0.
4.
Misalkan
zadalah intejer representasi binemya adalah
S.
5.
Untuk
I =1
ke
smaka:
5.1
Misalkan
s,
adalah representasi bner g-bit dari intejer
(z+
i )mod
2g.
5.2
Hitung Ri
=H(s,).
6. MisalkanR
=Roll
RI
11
...
11
R,.
7.
Misalkan
r
adalah intejer yang representasi binernya adalah
R.
8.
Jika
r
. b2
5d
(modp) maka hasilnya ("Terima"); lainnya ("Tolak").
Algoritma E. Pembuatan Pasangftn Kunei
Input: Parameter domain D
=(p,
a,
b,
P,
n, h)
Output: Kunci publik Q, kunci pribadi
d
1. Pilih d
ER[I, n-11.
2 .
Hitung
Q
= 6%'.3.
Hasilnya (Q,
4.
Algoritma F. Pengesahan Pasangan Kunci
Input: Parameter domain D
=@,
a, b,
P,
n,
h)
Ourput: Penerimaan atau penolakan validitas
Q
1.Periksa Q
# m.2.
Periksa bahwa
XQdan
ye
merepresentasikan elemen-elemen
dari
F,
(misalkan intejer-intejer dalam interval [0,
p l ] ) .
3.
Periksa bahwa
Q memenuhi persamaan kurva eliptik yang didefmisikan
dengan a dan b.
4.
Periksa bahwa
nQ
=a.
5.
Jiia beberapa verifikasi gagal
rnaka
hasilnya ("Invalid");
lainnya
("Valid").
Lamplran
2PROGRAM TES KEPRIMAAN DAN PEMBANGKITAN KUNCI
ELGAMAL
PROGRAM TES KEPRIMAAN
with (numtheory) :
Tes Miller- Rabin
tesmilrab := proo (randp1::anything)
local r, s, t, r a n k , a, y, tes, j, integerp, flag, hasil, tesmilrab; r := randpl-1; s := 0; for s while 'modb(r, 2) = 0 do s := s; r := iquo(r, 2) end do; for t from 0 to 30 do t := t;
randx
:=
rand(2..
randpl-2); a := rank(); y := 'mod'('CA'(a, r), randpl);if y <> 1 and y <> randpl-1 then tes := 0;
for j to s
while j
<=
8-1 and y<>
randpl-1 do y := 'mod'(yA2, randpl);if y = 1 then
tes := 0; j := j+l; integerp := komposit else
tes := 1 integerp := pseudoprim end if
end do;
if y <> randpl-1 then
tes := 0 integerp := komposit end if
else
flag := 1; tes : 1 integerp := pseudoprim end if
end do;
t :- t; tes := integerp; tesmilrab := tes end proc:
Tes Syarat Prima
tesprim : = proc (prima) 10-1 - 5 , tesprim; tes := 'mod' (prima, 4) ;
if tes = 3 then tesprim := 1 else tesprim := 0 end if end proc:
Tes Prima
Biasa
teqriail := proc (prima) local d, tesl, tespriml; for d from 2 to prima-1
while t e s l
<>
0 dod := d ; t e s l := 'mod' (prima, d) end do;
t e s p r h l := tesl
end proe:
Tes Prima Aman
teaprim2 := proc (prima) l o c a l y , tesprim2;
i f tespriml (prima) = 1 then
y := prima-1: y := (1/2)*y end i f ; i f tespriml(y) = 1 then tesprim2 := 1 e l s e tesprim2 := 0 end i f end proc:
Memilih suatu generator
dari grup siklikZp
primitif := proc (prima)
l o c a l a l f a , a l f a l , f l a g , q , b, b l , p r i m i t i f ; f l a g := 0; while f l a g
<>
1 do a l f a l := rand(1..
prima-2); a l f a := a l f a l 0 ; q := ( 1 / 2 ) *prima-1/2; b:=
'mod'(alfaA2, prima):
i f b = 1 then f l a g := 0 e l s e b l := 'mod'(alfaAq, prima) end i f ; i f b l = 1 then f l a g := 0 e l s e f l a g := 1 end i f end do; primitif := a l f a end proc:Memilih
Prima
Aman
Randon:
rand1 := rand(50
. .
200) :randpl := r a n d l 0 :
i f 'and' ( r e 1
+
3, type(randp1, men) ) than randpl : = randpl+l e l s e randpl := randpl end i f ; i f te&lrab(randpl) = 1 then integcrpl := t e s m i l r a b ( r a n a 1 ) ; 'impliea'(lakukan, lakukan*tes*prima*lagi) e l s e.integarpl : = tesmilrab (randpl) end i f ;
i f isprime (randpl)
<>
t r u e then prima : = nextprima (randpl)else
prima : = randpl end if;
if 'and'(tesprim(prima) = 1, tasprid(prima) = 1) then generatorprima := primitif(prima)
else
primanya inplies tidak*lolos*uji; lakukan implies pilih*primanya*lagi; prima : = safeprime (prima) ;
generatorprima : = primitif (prima) end if;
randpl :=95 integerpl := kon~posit
piimu := 97
lakukun pilih printo~lya lugi prima := 10:
PROGRAM PEMBANGKITAN KUNCI ALGORITMA ENKRIPSI
ELGAMAL
Pembangkitan Kunci Penyandian Kunci Publik ElGamal
alpha := primitif (p) :
acak := rand(1
..
p-2): a := acak0 :y := 'mod' ( ' L A ' (alpha, a), p) :
print(Kunci*Publik*A*a&lah*('p' = p, 'alpha' = alpha, ' y o = y ) ) ;
print(Kunci*Pribadi*A*a&1ah*('a1 = a));
Kzaxci Publik A udnluh { p = 467,
n
= 418,y-
57) Kunci Pn'hadi A uduluh ( a = 2 13)Lampiran
3
PROGRAM ARITMATIKA KURVA ELIPTIK
Program Kuna Ellptlk
restart:
Peudefinisian F'rcsedw yang digunakan
with (numtheory) :with (RandomTools) :
with(RandomTools[MersemeTwister]):
W i r i m a A c a k
adalah hosedur
untuk membangkitkan bilangan prima secara acak m bitPrimaAcak := proc (m: :posint)
local AcIn::PrimaAcak, ml,m2,R,i::integer, T::symbol: ml := 2*(m-1):
m2 := 2"(m) ;
AcIn := rand(ml. .m2) :
R:=AcIn ( ) :
T: =isprime (R) :
for i while '&false do R:=AcIn() : T: =isprime (R) : end do: return (R) : end proc:
Contob:
st := time0 :Bit:=6:P:=PrimaAcak(Bit) ;waktu := time0 -st;
P : = 1 7
,*.lr!.-ru . .
-
. .. . . . .=O-
.ECAcak
adalah
Pmsedur untuk membangkitkan parametera dan
b (persamaan kurva) dengan b tidak no1 (agarkurva
tidak memuat tit& [O,O]),secara
acak
ECAcak := proc(P::posint)
local Ac1n::PrimaAcak. a,b,T,i::integer: AcIn := NewGenerator(range=l..P-1):
a:=AcIn() :
b:=AcInO :
T:=(4*aA3+27*b*2) mod P: for i while T=O and b=O do
a:=AcInO : b:=AcInO : T:=(4*aA3+27*bA2) mod P: end do: return(Ia,bl): end proc:
Contoh:
>
K:=ECAcak (P) ;K
:= [2,2]Titik-titik Kurva EBptik adalah hsedur untuk membangkitkan
semua
titik padakurva
Titik2 := proc (P::posint, K::list)
local s. R. T, x , y, B, i, waktu, st, j, ordarp; st := time0 ; s := ['$'(O
. .
P-l)]; i := 0; forx
in s do R :- .d' (xA3+K[11 *x+K[2],P)
; T :-
legendre (R, P) ; if T = 1 then i := i+l;y := mroot(R, 2, P);print([x, yl); B := [x, yI;y := 'mod'(-op(2
,
a),
P) ;print ( [x, yl )
end if end -do ;
j := 2 * i + l ; print('OrderP1
=
j ; orderp:=
j; waktu:=
tima()-st;print('waktut = waktu) end proc :Contoh:
>
~ i t i k Z ( ~ ,x);
[461,[O.llI,[3, 11,[3.16],k5, lI,[5,16],[6.31,[6, 14I3~7,6j,[7,11],[9,l,1'),16] [10,61, [10,11], [13.7] [13, lOj [16,4] [16.13] Orderl'= 19 trahiu =00.06C
AdisiTtk
adalah
prosedw menjumlahkan dua titikX
dan
Ypada M a
eliptik
A,dengan unsur
identitas
[O,O] (titikdi
talc hingga).AdisiTtk:= proc(X::list,Y::list,A::list,P::posint) local l,hl,h2::intager:
if Eq(X,[o,O])=t~e or Eq(Y,[O,Ol)=true then return([X[ll+Y[ll ,X[2l+Y 1211) ;
elif Eq(X,Y)=true then
I:=( (3*X[1lA2+A[1I)/ (2*X[2]) ) mod P: hl:=(lA2-2*X[11) mod P:
h2:=(l*(X[l]-h1)-X[21) mod P: return([hl,hZ]) ;
elif Eq(Y ,Neg(X,P) )=true then return([O,OI) ; else 1:=((Y~~l-x[2l)/(Y[1l-x[ll)) mod P: hl:=(lA2-X[l]-Y[l]) mod P: h2:=(l*(X[l]-h1)-X[21) mod P: return( [hl ,h2] ) ; end if: end proc:
MultiTtk adalah Prosedur
untuk
menghitungkelipatan
titiksebanyak k kali.
<iTtk:~proc(A::list,k::integer,K::list,P::integer) local H,G,X::list, i::integer:X:=convert (k ,bass , 2 ) ;
G:=A: H:=[O,Ol :
if op(l,X)=l then H:=G:
end if:
for i from 2 to nops (X) do G:=AdisiTtk(G,G,K,P) : if op(i,X)=l then H:=AdisiTtk(H,G,K,P) : end if: end do: return ( A ) ; end proc:
Neg
adalah
Prosedur
untukmenexitdm negatif
suatu titik.Neg := proc(B::list,P::posint) local y::posint:
Y
:= -(op(2,B)) mod P; =turrn([op(l,B) ,yl): end proc:Contoh:
>
nA:=Neg(A,P) ;nA :=[17; 141
Eq adalah Prosedm untuk memeriksa kesamaan dua titik.
Eq := proc(A::list,B::list) if A[lI=B[ll and A[2I=Bf21 then
return (true) ; else return (false) ; end if: end proc: Contoh:
>
Test:=Eq(A,nA) ; T i t :=falsePilihTitikAcak adalah F'rosedur untuk pembangkitan satu titik
pada
kurva secaraacak
orderP:=19: TitiWcak := proc(K::list,P::posint) local AcIn,x,y,T,R,i,k,A,G,A,X,orderA: AcIn := NewGenerator(range=l..P-1): x:=AcIn(); R:=(xA3+K[1] *x+K[2] ) mod P; T: =legendre (R,P) ; for i while T=(-1) do x:=AcIn() ;#print('xl'=x) ; R:=(xA3+K[1] *x+K[2] ) mod P: T: =legendre (R, P) ; end do: y:=nuoot(R,2,P) ; A:=[x,yl; k:=(2*P)+l;X:=convert(k,base,2); if op(l,X)=l then G:=A: end if: H:=G; for i from 1 to kwhile Eq(H, [O,Ol)=false do
H:=MultiTtk(A,i,K,P):#print(i= A): end do:
orderA:=i-1; #print('orderA1=i-1);
for i while orderA
<>
orderP do for i while T=(-1) do x:=AcIn() : R:=(xA3+K[11*x+K[2]) mod P: T : -legendre (R, P) ; end do: y:=mroot(R,2,P) ;end do: A:-[x,y] ;
end proc:
contoh:
>
A := ~ i t i k ~ c a k ( ~ , P) ;A := [3,1 j
Sub-grup kurva Eliptik yang dibangkitkan o l d titik generator k:-(2+P)+1:
OenO~pSiklik:=proa(A::list,k::integer,K::list,P::intager) local H,G,X::list, i,ordcrA::integer:
X:=convert(k,baee,2); if op(l,X)=l then G:=A: end if: H:=G; for i from 1 to
k
while E q ( H , [O,O])=false do X:=MultiTtk(A,i,K,P):print(i- X): end do:orderA:=i-1; print ( 'orderAT=i-1) ;
end proc:
>
GenGrupSiklik (Ask ,K, P) :1 = [ 3 , l ] 2 = [ 1 3 , 7 ] 3=[0.11], 4=[10,11], 5 = [ 5 , l ] , 6=[9.16J, 7 = [ 7 , 6 ] , 8=[16,4], 9=16.14J, 10=[6,3J, 1 1 = [ I & 131 12=[7,11], 13=[9,1], 14=[5. 161, 15=[10,64 16= [0,6], 17= [13, 101, 18= [3,16j, 19- [O,O], orderA = 19