LAMPIRAN
DAFTAR PUBLIKASI ILMIAH PENULIS
No.
Judul
Penulis
Jenis Publikasi
Waktu Publikasi
Tempat
1
Implementasi
Algoritma
Pattern String
Matching
Nasional Inovasi
dan Teknologi
Informasi )
2014
Kabupaten
Samosir,
Sumatera
Utara
2
Implementasi
Keamanan
Informasi Pada
e-Commerce
Keamanan pada
Kombinasi
Protokol Secret
Sharing dan
Three-Pass
Satria
Prayudi
Jurnal TIMES
(JTM Vol 4, No
2)
2015
STMIK
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] *
}
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) {
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;
}
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;
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;
plaintext.push(P); }
return plaintext; }
function OneTimePad(length){ var d = new Date(); var key = new Array();
var m = 25; var a = 11; var c = 17; var X = 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]; }
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 "<br/>";