60
LAMPIRAN
DAFTAR PUBLIKASI ILMIAH PENULIS
No. 1
2
3
Judul
Penulis
Jenis Publikasi
Implementasi Satria SNITI Algoritma Prayudi (Seminar Nasional Inovasi Pattern String dan Teknologi Matching Dalam Informasi ) Menerjemahkan Idiom Berbahasa Inggris Implementasi Satria KETIK Keamanan Prayudi (Konferensi Informasi Pada Teknologi Informasi) e-Commerce Analisis Satria Jurnal TIMES Keamanan pada Prayudi (JTM Vol 4, No Kombinasi 2) Protokol Secret Sharing dan Three-Pass
Waktu Publikasi
Tempat
2014
Kabupaten Samosir, Sumatera Utara
2014
Hotel Karibia, Medan
2015
STMIK TIME, Medan
Universitas Sumatera Utara
61
LAMPIRAN 1
SOURCE CODE PROGRAM
1.
secret_sharing.js
//////////////////////////////////////////////////////////////////// //
Protokol Secret Sharing
//
//
Satria Prayudi – 137038047
//
//
Menggunakan source secret sharing dari Wikipedia
//
//
dengan pengembangan yang dibutuhkan
//
//
https://en.wikipedia.org/wiki/Shamir%27s_Secret_Sharing
//
//////////////////////////////////////////////////////////////////////////
function random(limit){ return Math.floor((Math.random() * limit) + 1); } function split(m, n, t) { var prime = 997; /* harus selalu lebih besar dari jumlah m+t+n */ var k = []; k[0] = m; for(var i = 1; i <= t-1; i++){ k[i] = random(20); } console.log("m :"+m); console.log("Koeffisien: "+k); var p, pangkat, polinom_ke_i, shares = []; for(p = 1; p <= n; p++) { for(pangkat = 1, polinom_ke_i = k[0]; pangkat <= t-1; pangkat++) { polinom_ke_i = (polinom_ke_i + (k[pangkat] * (Math.pow(p, pangkat))));
Universitas Sumatera Utara
62
} polinom_ke_i = polinom_ke_i % prime; shares[p - 1] = [p, polinom_ke_i]; } return shares; } function rebuild_array(arr) { var share = []; var share_length = arr[0][1].length; for(var i=0; i< share_length; i++) { var inner_share = []; for(var j=0; j< arr.length; j++) { var secret = arr[j][0]; var shareN = arr[j][1][i][1]; //console.log(arr[j]); //console.log("Secret : " + secret); //console.log("ShareN : " + shareN); inner_share[j] = [secret, shareN]; //console.log("Inner Share : " + inner_share); } share[i] = inner_share; } return share; } function gcdD(a,b) { var n, c, r;
Universitas Sumatera Utara
63
if (b == 0) return [a, 1, 0]; else { n = Math.floor(a/b); c = a % b; r = gcdD(b,c); return [r[0], r[2], r[1]-r[2]*n]; } } function modInverse(k) { var prime = 997; /* harus selalu lebih besar dari jumlah m+t+n */ k = k % prime; var r = (k < 0) ? -gcdD(prime,-k)[2] : gcdD(prime,k)[2]; return (prime + r) % prime; } function join(shares) { var prime = 997; /* harus selalu lebih besar dari jumlah m+t+n */ var accum, count, formula, startposition, nextposition, value, numerator, denominator; for(formula = accum = 0; formula < shares.length; formula++) { for(count = 0, numerator = denominator = 1; count < shares.length; count++) { if(formula == count) continue; // If not the same value startposition = shares[formula][0]; nextposition = shares[count][0]; numerator = (numerator * -nextposition) % prime; denominator = (denominator * (startposition nextposition)) % prime; } value = shares[formula][1];
Universitas Sumatera Utara
64
accum = (prime + accum + (value * numerator * modInverse(denominator))); //accum = (prime + accum + (value * numerator * modInverse(denominator))) % prime; } while(accum < 0){ accum += prime; } accum = accum % prime; return accum; } function splitting_arrays(arrays){ var temp = []; for (var i =0; i<arrays.length; i++){ for(var j=0; j<arrays[i].length; j++){ if(temp[j] == undefined) temp[j] = [[i+1, arrays[i][j][1]]]; else{ temp[j].push([i+1, arrays[i][j][1]]); } } } return temp; }
Universitas Sumatera Utara
65
2.
three-pass.js
//////////////////////////////////////////////////////////////////// //
Protokol Three-Pass
//
//
Satria Prayudi – 137038047
//
//////////////////////////////////////////////////////////////////////////
var mod = 997; function encrypt(plaintext, key){ console.log("Enc :"); console.log(plaintext); var ciphertext = new Array(); var r; //tampung hasil sementara var C; //tampung karakter terenkripsi sementara for(var i = 0; i < plaintext.length; i++){ r = Number(plaintext[i]) + Number(key[i]); if(r < 0) C = mod - (Math.abs(r) % mod); else C = Math.abs(r) % mod; //C = (plaintext[i] + key[i]) % mod; console.log(plaintext[i]+"+"+key[i]+ "%" + mod +"="+C); } }
ciphertext.push(C);
return ciphertext;
function decrypt(input, key){ console.log("Dec :"); console.log(input); //var temp = input.split(","); var plaintext = new Array(); var r; var P; for(var i = 0; i < input.length; i++){ r = Number(input[i]) - Number(key[i]); console.log(input[i]+"-"+key[i]+"="+r); if(r < 0) P = mod - (Math.abs(r) % mod); else P = Math.abs(r) % mod; //P = (input[i] - key[i]) % mod; console.log(input[i]+"-"+key[i]+ "%" + mod +"="+P);
Universitas Sumatera Utara
66
plaintext.push(P);
} }
return plaintext;
function OneTimePad(length){ var d = new Date(); var key = new Array(); var var var var
m a c X
= = = =
25; 11; 17; 1;
for(var n = 0; n < length; n++){ var t = d.getMilliseconds(); var X = ((a * X) + c + t) % m; } }
key.push(X);
return key;
function splitting_arrays(arrays){ var temp = []; for (var i =0; i<arrays.length; i++){ for(var j=0; j<arrays[i].length; j++){
}
}
if(temp[j] == undefined) temp[j] = [[i+1, arrays[i][j]]]; else{ temp[j].push([i+1, arrays[i][j]]); }
} return temp;
function gcdD(a,b) { var n, c, r; if (b == 0) return [a, 1, 0]; else { n = Math.floor(a/b); c = a % b; r = gcdD(b,c); return [r[0], r[2], r[1]-r[2]*n]; } }
Universitas Sumatera Utara
67
function modInverse(k) { var prime = 997; /* harus selalu lebih besar dari jumlah m+t+n */ k = k % prime; var r = (k < 0) ? -gcdD(prime,-k)[2] : gcdD(prime,k)[2]; return (prime + r) % prime; } function join(shares) { var prime = 997; /* harus selalu lebih besar dari jumlah m+t+n */ var accum, count, formula, startposition, nextposition, value, numerator, denominator; for(formula = accum = 0; formula < shares.length; formula++) { for(count = 0, numerator = denominator = 1; count < shares.length; count++) { if(formula == count) continue; // If not the same value startposition = shares[formula][0]; nextposition = shares[count][0]; numerator = (numerator * -nextposition) % prime; denominator = (denominator * (startposition nextposition)) % prime; } value = shares[formula][1]; accum = (prime + accum + (value * numerator * modInverse(denominator))); //accum = (prime + accum + (value * numerator * modInverse(denominator))) % prime; } while(accum < 0){ accum += prime; } accum = accum % prime; return accum; } function char_(a) { if(a == 10) return "
"; return String.fromCharCode(a) }
Universitas Sumatera Utara