• Tidak ada hasil yang ditemukan

Teknik Pemecahan Kunci Algoritma ElGamal Menggunakan Metode Index Calculus

N/A
N/A
Protected

Academic year: 2017

Membagikan "Teknik Pemecahan Kunci Algoritma ElGamal Menggunakan Metode Index Calculus"

Copied!
13
0
0

Teks penuh

(1)

Lampiran Listing Program

1.

ElGamal.py

from random import randint

import akarPrimitifGauss as primitiveRoot

from java.math import BigInteger as nonExshaustingPrimeGenerator import pengujianMillerSelfridgeRabin as primality

def keyGenerating(primeBit, A): myPK = [0,0,0]

batasBawah = pow(2, (primeBit-1)) up = primeBit

batasAtas = (pow(2, up)) batasAtas = batasAtas-1

prime = randint(batasBawah, batasAtas)

prime = nonExshaustingPrimeGenerator.valueOf(prime) while(primality.pengujianMSR(prime)==False):

prime =

nonExshaustingPrimeGenerator.nextProbablePrime(prime) prime = int(prime)

alpha = primitiveRoot.GaussForPrimitiveRoot(prime) alpha_a = pow(alpha, A)

alpha_a = alpha_a%prime myPK[0] = alpha

myPK[1] = alpha_a myPK[2] = prime return myPK

def Enkripsi(publicKey, M): print M

C = [[0 for j in range(2)] for i in range(len(M))] a = publicKey[0]

aA = publicKey[1] p = publicKey[2]

for i in range(0, len(M)): k = randint(2,p-2) C[i][0] = (pow(a,k))%p

C[i][1] = (((pow(aA,k))%p)*(M[i]))%p print "C = ",C

return C

def Dekripsi(publicKey, C, A): p = int(publicKey[2]) print p

(2)

print "C.length =", len(C) for i in range(0, len(C)): exp = p-1-A

mytemp = pow(C[i][0], exp) % p M[i] = (mytemp * C[i][1])%p return M

2.

PengujianMillerSelfridgeRabin.py

from random import randint import timeit

global k

def pengujianMSR(n):

msrTimer1 = timeit.default_timer() t=1

k=0 m = n - 1 while(m%2==0): t=t+1 m = m/2 MSRlist =[]

for k in range(0,20): a = randint(2,n-2) MSRlist.append(a)

while(MSRlist.count(a)>0): a = randint(2,n-2) x = (pow(a,m))%n

if(t==1 and (x!=1 or x != n-1)): return False elif(x==1 or x == n-1):

continue else:

j=1

while(j<t-1): del x

x = (pow(2,j))*m x = (pow(a,x))%n if(x==1):

return False elif(x==n-1): break continue else:

j+=1 del x

x = (pow(2,(t-1)))*m x = (pow(a,x))%n if(x==n-1): break

else: return False print n

msrTimer2 = timeit.default_timer() return True

3.

AkarPrimitifGauss.py

(3)

from math import sqrt from random import randint import timeit

def GaussForPrimitiveRoot(p):

gaussTimer1 = timeit.default_timer() m = randint(2,p)

t=1

diekonter=0 while(True): thisList =[0] diekonter+=1

while((pow(m,t)%p)!=1):

thisList.append(pow(m,t)%p) t+=1

if(t==p-1):

gaussTimer2 = timeit.default_timer()

print "pembangkitan alpha =",gaussTimer2-gaussTimer1,"s"

return m else:

b = randint(2,p-2)

while(thisList.count(b)>0): b = randint(2,p-2) u = OrderCounter(b, p) print "u =",u

if(u==p-1):

gaussTimer2 = timeit.default_timer() return b

else:

v = lcm(t, u) a = brent(v) c = v/a if(v==p-1):

ap = pow(m,(t/a))%p

ap = (ap*(pow(b,(u/c)[p])))%p

gaussTimer2 = timeit.default_timer() return ap

else:

del thisList

m = ((pow(m,(t/a))%p)*(pow(b,(u/c))%p))%p print "m",diekonter," yang baru =",m pass

pass pass continue

def OrderCounter(alpha, p): order=1

while((pow(alpha,order))%p!=1): order+=1

return order

def gcd(x,y): while y > 0:

(4)

def lcm(x, y):

return (x*y)/(gcd(x, y))

def FaktorisasiFermat(N): global factor1

global factor2 s = ceil(sqrt(N)) u = (s*2)+1 v = 1 r = (s*s)-N while(r!=0): if(r>0):

while(r>0): r = r - v v = v + 2 continue else:

r = r + u u = u + 2 continue

factor1 = ((u + v) - 2)/2 factor2 = (u - v)/2

4.

Step1.py (Index Calculus)

from random import randint, random import sys

sys.path.append("C:\\jython2.7.0\\jama\\Jama-1.0.3.jar")

sys.path.append( "C:\\java\jblas\\mikiobraun-jblas-8213dba\\jblas-1.2.4.jar")

sys.path.append("C:\\jython2.7.0\\JyNI\\JyNI.jar")

sys.path.append('C:\\java\\apache common math\\commons-math3-3.6.1.jar')

sys.path.append('C:\\jython2.7.0\\SCPSolver.jar') from Jama import Matrix, LUDecomposition ,

SingularValueDecomposition as svd, CholeskyDecomposition as chol from org.apache.commons.math3.linear import DecompositionSolver, Array2DRowFieldMatrix,\

RealMatrix, RealVector, ArrayRealVector, MatrixUtils, Array2DRowRealMatrix, LUDecomposition,\

QRDecomposition, CholeskyDecomposition, EigenDecomposition as myEigen

myFactorbase = [ , ,…,79 9]

global factor1, factor2 myReporter = ""

(5)

randomB = None gloc = None primus = None be = None akP = None

def logFB(alpha, prima, fb): #initiating

bound = prima-2 global expList

expList = [0]*len(fb)

LFB = [[0]*len(fb) for x in xrange(len(fb))] fbLength = len(fb)

i=0

while(i<fbLength):

exp = randint(2, bound)

while(expList.count(exp)>0 or exp<=2): exp = randint(2, bound)

expList[i]=exp

beta = pow(alpha,exp) beta = beta%prima j=fbLength

for j in range(fbLength-1, -1, -1): print i,". j = ",j," | beta = ",beta if(j==0 and beta > fb[fbLength-1]): x=0

while(x<fbLength): LFB[i][x]=0 x+=1

print "disini i =",i i=i-1

break else:

while(beta % fb[j]==0 and beta>1): LFB[i][j]+=1

beta = beta/fb[j] if(beta==1):

pass else:

continue return LFB

def IndexCalculusFinale(B, p, alpha, s): global primus

global akP global be primus = p akP = alpha be = B i=0 fb=[] i=0

while(myFactorbase[i] <= s): fb.append(myFactorbase[i]) i+=1

(6)

global gFB

realMatrixExp = MatrixUtils.createRealMatrix(len(fb), 1) while(i<len(fb)):

exp = randint(2, bound)

(7)

print LFB

(8)

myReporter+=str(FBlog[i]) myReporter+=" = "

myReporter+=str(FBlog[i]*GammaIndex[i]) myReporter+="\n"

print

GammaIndex[i],"*log",fb[i],"=",GammaIndex[i],"*",FBlog[i],"=",FBlog[ i]*GammaIndex[i]

temp += (FBlog[i]*GammaIndex[i]) i+=1

if(i==len(fb)): temp = (temp-exp) temp = temp%newp global gloc gloc = temp return temp

5.

myIOControl.py

from java.io import FileReader, BufferedReader from javax.swing import JFileChooser

from math import floor import timeit

from __builtin__ import str

def myTimer():

start = timeit.timeit() print "hello"

end = timeit.timeit() return end - start

def expTester(a, b, p): return pow(a, b)%p

def fileBrowser():

myFileChooser = JFileChooser()

rVal = int(myFileChooser.showOpenDialog(None)) print rVal

if(rVal == JFileChooser.APPROVE_OPTION):

theName = myFileChooser.getSelectedFile().getName() thePath = myFileChooser.getCurrentDirectory().toString() try:

myPath = theName + "/" + thePath fileReader = FileReader(myPath)

bufferedReader = BufferedReader(fileReader) inputFile=""

textFieldReadable = bufferedReader.readLine() while(textFieldReadable!=None):

inputFile+=textFieldReadable inputFile+="\n"

return inputFile

except(RuntimeError, TypeError, NameError): print "eror"

(9)

for line_no, line in enumerate(f): if len(line.strip()) != 32: print line_no, line for line in f:

for i in range(0, 3) and (line[i]!=" "): print line[i]

return line f.close()

def arraySplitter(M):

M2D = [[0 for j in range(2)] for i in range(len(M)/2)] # [[0 for j in range(2)] for i in range((len(M))/2)]#[[0] * (len(M)/2)] * 2

#print M2D i=0

print len(M) j=0

while i<len(M):

ind = floor((i+1)/2) ind = int(ind) if(i % 2 == 0): M2D[j][0] = M[i] elif(i % 2 == 1): M2D[j][1] = M[i] j+=1

i+=1 return M2D

def returnItToString(M): i=0

myString = ""

for i in range(0,len(M)):

myString = myString + str(unichr(M[i])) return myString

def cypherTxtToList(path): f = open(path)

x = []

for word in f.read().split(): print(word)

x.append(int(word)) print x

return x

def txtToWordsList(path): f = open(path)

x = []

for word in f.read().split(): #print(word)

x.append(word) print x

def saveDecryptedText(theString, myFile, myType): fileName = "D:\target/"+myFile+myType

(10)

my_file.close()

(11)

dieString+="log Beta = "

#dieString+="= " j=0

while(j<len(coef)): if(coef[j]>0): if(j>0):

dieString+=" + " dieString+=str(coef[j])

dieString+="*"

dieString+=str(A[j]) j+=1

dieString+=" - "

dieString+=str(expo) dieString+=" mod "

dieString+=str(gP-1) dieString+="\n"

if(Ax!=int(Ax)): Ax = round(Ax, 3) else:

Ax = int(Ax)

dieString+="log Beta = "

dieString+=str(Ax) return dieString

def derGMDdrucker(fBase, genMat, genGam): toPrint = ""

toPrint+="\n"

toPrint+="factor base"

for i in range(0, len(genMat)): toPrint+="\t"

toPrint+=str(fBase[i]) i+=1

if(i==len(genMat)): toPrint+="\t"

toPrint+="Gamma"

i=0

toPrint+="\n"

for i in range(0, len(genGam)): toPrint+="\n"

toPrint+="\t\t"

for j in range(0, len(genMat)): toPrint+=str(genMat[i][j]) toPrint+="\t"

j+=1

if(j==len(genMat)):

toPrint+=str(genGam[i]) i+=1

return toPrint

def derReddrucker(fBase, gReductedIC): toPrint = ""

for i in range(0, len(gReductedIC)): toPrint+="log "

toPrint+=str(fBase[i]) toPrint+=" = "

(12)

toPrint+="\n"

(13)

Curriculum Vitae

Data Pribadi

Nama

:

Erwin M H Sinaga

Tempat, Tanggal lahir :

Buhit, 5 Januari 1994

Agama

:

Kristen Protestan

Alamat rumah

:

Jl. Sembada Gg. Mawar 2

No.1, Medan

Nomor telepon

:

082364763238

Email

:

erwin_sinaga@aol.com

Riwayat Pendidikan

2011

2017

:

S-1 Ilmu Komputer Universitas Sumatera

Utara, Medan

2008

2011

:

SMA Negeri 1 Pangururan

2005

2008

:

SMP Negeri 1 Pangururan

1999

2004

:

SD Negeri 3 Pangururan

2004

2005

:

SD Negeri 28 Desa Parlondut

Pengalaman

Periode 30 Juli s/d 16 Agustus 2014 :

Praktik Kerja Lapangan (PKL) di Balai

Meteorologi dan Geofisika Indonesia

Medan

Keahlian Komputer

Microsoft Office Word dan Excel

Trouble Shooting Windows

Referensi

Dokumen terkait

[r]

dibuat dalam lembaran komik yang sangat dihargai sebagai suatu karya seni.. Populernya karya-karya Tezuka memacu munculnya banyak serial

Usaha Mikro Rp. Usaha kecil adalah usaha ekonomi produktif yang berdiri sendiri, dilakukan orang perorangan atau badan usaha yang bukan merupakan anak perusahaan

Berdasarkan studi pendahuluan yang dilakukan oleh peneliti pada tanggal 30 November-13 Desember 2015, diketahui di desa Dameka, kecamatan Katikutana Selatan,

Segala puji dan syukur penulis panjatkan kepada Tuhan Yang Maha Esa, karena atas segala rahmat dan pertolongan-Nya sehingga penelitian dapat selesai dilakukan

Tabel 4.7 Distribusi PHBS Tatanan Rumah Tangga Responden Warga Dusun Deres yang Bekerja yang Bekerja Sebagai Pemulung di TPA Blondo

As such, no assurance can be given as to the Statistical Information s accuracy, appropriateness or completeness in any particular context, nor as to whether the

Konsep &amp; Teori Yang relevan Penemuan Yang relevan Pengajuan Hipotesis Praduga Terhadap Hubungan antar Variabel Strategi Pendekatan Penelitian Penyusunan Instrumen