A. Algoritma
1. Deskripsikan hubungan KSK dengan Kriptografi Algoritma Kelompok!
Sebuah algoritma pada enkripsi
public key. RSA merupakan algoritma pertama yang cocok untuk digital signature
seperti halnya ekripsi, dan salah satu yang paling maju dalam bidang
kriptografi public key. RSA masih digunakan secara luas dalam protokol electronic
commerce, dan dipercaya dalam mengamnkan dengan menggunakan kunci yang cukup
panjang
2. Jelaskan tentang Algoritma kelompok mulai dari: pengertian, sejarah,
cara kerjanya (proses ekripsi dan proses deskripsi) , gambarkan flowchart berikan
penjelasan!
Pengertian
RSA adalah metode yang
menggunakan perhitungan matematika yang rumit dandisertai dengan kunci pengaman
awal (dengan private key maupun dengan public key)sehingga amat sulit untuk
ditembus oleh hacker. Adapun prinsip pengamanan metodeini adalah bagaimana sistem dapat
mengamankan proses penyimpanan dan pengirimandokumen. Mula-mula dokumen dalam
bentuk teks dienkripsi dengan metode RSA.Sehingga dokumen tidak dapat dibaca
oleh siapapun, karena teks telah berubah menjadisusunan huruf yang teracak.
Dokumen yang susunan hurufnya telah teracak tersebut jika ingin dibaca
oleh pemilik dokumen, maka dokumen tersebut harus dibuka dengandekripsi RSA
kembali (Supriyono, 2008).
Algoritma RSA merupakan
salah satu algoritma public key yang populer dipakai dan bahkan masih dipakai
hingga saat ini. Kekuatan algoritma ini terletak pada proses eksponensial, dan
pemfaktoran bilangan menjadi 2 bilangan prima yang hingga kini perlu waktu yang
lama untuk melakukan pemfaktorannya.
SEJARAH
Algoritma ini dinamakan sesuai dengan nama penemunya, Ron Rivest, Adi
Shamir dan Adleman(Rivest-Shamir-Adleman) yang dipublikasikan pada tahun 1977
di MIT, menjawab tantangan yang diberikan algoritma pertukaran kunci Diffie
Hellman.
Skema RSA sendiri mengadopsi
dari skema block cipher, dimana sebelum dilakukan enkripsi, plainteks yang ada
dibagi – bagi menjadi blok – blok dengan panjang yang sama, dimana plainteks
dan cipherteksnya berupa integer(bilangan bulat) antara 1 hingga n, dimana n
berukuran biasanya sebesar 1024 bit, dan panjang bloknya sendiri berukuran
lebih kecil atau sama dengan log(n) +1 dengan basis 2.
Fungsi
enkripsi dan dekripsinya dijabarkan dalam fungsi berikut :
C = Me mod n ( fungsi enkripsi )
M = Cd mod n (fungsi dekripsi)
C = Cipherteks
M = Message / Plainteks
e = kunci publik
d= kunci privat
n = modulo pembagi(akan dijelaskan lebih lanjut )
Proses Enkripsi Pesan
Misalkan pada suatu kasus
si A ingin mengirim pesan m kepada si B. A mengubah m menjadi
angka n < N, menggunakan protokol yang
sebelumnya telah disepakati dan dikenal sebagai padding scheme. Padding
scheme harus dibangun secara hati-hati sehingga tidak ada nilai
dari m yang menyebabkan masalah keamanan. Contohnya, jika kita
ambil contoh sederhana dari penampilan ASCII dari m dan
menggabungkan bit-bit secara bersama-sama akan menghasilkan n,
kemudian pessan yang berisi ASCII tunggal karakter NUL (nilai numeris 0) akan
menghasilkan n = 0, yang akan menghasilkan ciphertext 0
apapun itu nilai dari e dan N yang digunakan.
Maka A mempunyai nilai n
dan mengetahui N dan e, yang telah diumumkan oleh B. A
kemudian menghitung ciphertext c yang terkait pada n :
c = ne mod N (1)
Perhitungan tersebut dapat
diselesaikan dengan menggunakan metode exponentation by squaring,
yaitu sebuah algoritma yang dipakai untuk komputasi terhadap sejumlah nilai
integer yang besar dengan cepat. Kemudian A mengirimkan nilai c kepada
B.
Proses Dekripsi Pesan
B sudah menerima c dari
A, dan mengetahui kunci privat yang digunakan B. B kemudian mengembalikan
nilai n dari c dengan langkah-langkah sebagai
berikut :
n = cd mod N (2)
Perhitungan diatas akan
menghasilkan n, dengan begitu B dapat mengembalikan pesan
semula m.
Prosedur dekripsi bekerja karena
cd ≡ (n)d ≡ (mod N) (3)
Kemudian, karena ed ≡
1 (mod p-1) dan ed ≡ 1 (mod q-1), hasil dari Fermat's
little theorem.
ned ≡ n (mod p) (4)
dan
ned ≡ n (mod q) (5)
Karena p dan q merupakan bilangan prima yang
berbeda, mengaplikasikan Chinese remainder theorem akan
menghasilkan dua macam kongruen
ned ≡ n (mod pq) (6)
Serta
cd ≡ n (mod N) (7)
FLOWCHART ALGORITMA RSA
3. Berikan deskripsi dari study kasus terkait tema kelompok dan pada
bagian mana dari study kasus tersebut Algoritma kelompok diterapkan!
STUDI KASUS
Pada Mei 2017
di daerah Palembang terjadi pembobolan rekening bank via internet banking.
Pelaku pembobolan rekening ini dilakukan oleh dua pelaku dengan korban milik
nasabah di sebuah Bank BUMN. Uang milik korban yang dibobol diperkirakan
sejumlah 1.2 Miliar. Kedua pelaku ini melakukan modusnya hingga melakukan
penggantian nomor HP korban untuk melakukan verifikasi transaksi ke operator.
Pelaku mengganti nomor HP korban bermodal KTP palsu. Untuk mengatasi ini Bank
dapat menggunakan Algoritma RSA sebagai salah satu cara mengamankan system
keamanan bank
4. Berikan sintaks dari algoritma (prosen enkripsi dan deskripsi) kelompok
dengan bahasa pemrograman yang dipilih!
// main.cpp
// RSA
//
// Created by Sergiy on 06.06.17.
#include
<iostream>
#include
<math.h>
#include
<string.h>
#include
<string>
#include
<stdio.h>
#include
<stdlib.h>
#include<conio.h>
bool
isPrime(long int prime);
long
int calculateE( long int t );
long
int greatestCommonDivisor( long int e, long int t );
long
int calculateD( long int e, long int t );
long
int encrypt( long int i, long int e, long int n );
long
int decrypt(long int i, long int d, long int n );
int
main( )
{
long int p, q, n, t, e, d;
long int encryptedText[100];
memset(encryptedText, 0,
sizeof(encryptedText));
long int decryptedText[100];
memset(decryptedText, 0,
sizeof(decryptedText));
bool flag;
std::string msg;
std::cout << "Welcome to RCA
program" << std::endl << std::endl;
// C??????? ????????? ? ?????????? ??????
// 1. ?????????? ??? ????????? ?????????
??????? ????? p ? q ????????? ???????
do
{
std::cout << "Enter a Prime
number p :" << std::endl;
std::cin >> p;
flag = isPrime( p );
if ( flag == false )
{
std::cout << "\nWRONG
INPUT (This number is not Prime. A prime number is a natural number greater
than 1 that has no positive divisors other than 1 and itself)\n" <<
std::endl;
}
} while ( flag == false );
do
{
std::cout << "Enter a Prime
number q :" << std::endl;
std::cin >> q;
flag = isPrime( q );
if ( flag == false )
{
std::cout << "\nWRONG
INPUT (This number is not Prime. A prime number is a natural number greater
than 1 that has no positive divisors other than 1 and itself)\n" <<
std::endl;
}
} while ( flag == false);
// 2. ??????????? ?? ???????????? n = p ·
q, ??????? ?????????? ???????.
n = p * q;
std::cout << "\nResult of
computing n = p*q = " << n << std::endl;
// 3. ??????????? ???????? ??????? ??????
?? ????? n: f(n) = (p-1)·(q-1)
t = ( p - 1 ) * ( q - 1 );
std::cout << "Result of
computing Euler's totient function:\t t = " << t << std::endl;
// 4. ?????????? ????? ????? e ( 1 < e
< f(n) ), ??????? ??????? ?? ????????? ??????? ?????? (t)
// ????? e ?????????? ???????? ???????????
e = calculateE( t );
// 5. ??????????? ????? d, ????????????????
???????? ? ????? e ?? ?????? f(n), ?? ???? ?????, ??????????????? ?????????:
//
d · e = 1 (mod f(n))
d = calculateD( e, t );
// 6. ???? {e, n} ??????????? ? ????????
????????? ????? RSA
std::cout << "\nRSA public key
is (n = " << n << ", e = " << e <<
")" << std::endl;
// 7. ???? {d, n} ?????? ???? ?????????
????? RSA ? ???????? ? ???????
std::cout << "RSA private key is
(n = " << n << ", d = " << d <<
")" << std::endl;
std::cout << "\nEnter Message to
be encryped:" << std::endl;
// there is a newline character left in the
input stream, so we use ignore()
std::cin.ignore();
std::getline( std::cin, msg );
std::cout << "\nThe message is:
" << msg << std::endl;
// encryption
for (long int i = 0; i < msg.length();
i++)
{
encryptedText[i] = encrypt( msg[i], e,
n);
}
std::cout << "\nTHE ENCRYPTED
MESSAGE IS:" << std::endl;
for ( long int i = 0; i < msg.length();
i++ )
{
printf( "%c",
(char)encryptedText[i] );
}
//decryption
for (long int i = 0; i < msg.length();
i++)
{
decryptedText[i] =
decrypt(encryptedText[i], d, n);
}
std::cout << "\n\nTHE DECRYPTED
MESSAGE IS:" << std::endl;
for (long int i = 0; i < msg.length();
i++)
{
printf( "%c",
(char)decryptedText[i] );
}
std::cout << std::endl <<
std::endl;
//system("PAUSE");
return 0;
}
bool
isPrime( long int prime)
{
long int i, j;
j = (long int)sqrt((long double)prime);
for ( i = 2; i <= j; i++)
{
if ( prime % i == 0 )
{
return false;
}
}
return true;
}
long
int calculateE( long int t )
{
// ?????????? ????? ????? e ( 1 < e <
t ) // ??????? ??????? ?? ????????? ??????? ?????? (t)
long int e;
for ( e = 2; e < t; e++ )
{
if (greatestCommonDivisor( e, t ) == 1
)
{
return e;
}
}
return -1;
}
long
int greatestCommonDivisor( long int e, long int t )
{
while ( e > 0 )
{
long int myTemp;
myTemp = e;
e = t % e;
t = myTemp;
}
return t;
}
long
int calculateD( long int e, long int t)
{
// ??????????? ????? d, ????????????????
???????? ? ????? e ?? ?????? f(n), ?? ???? ?????, ??????????????? ?????????:
//
d · e = 1 (mod f(n))
long int d;
long int k = 1;
while ( 1 )
{
k = k + t;
if ( k % e == 0)
{
d = (k / e);
return d;
}
}
}
long
int encrypt( long int i, long int e, long int n )
{
long int current, result;
current = i - 97;
result = 1;
for ( long int j = 0; j < e; j++ )
{
result = result * current;
result = result % n;
}
return result;
}
long
int decrypt(long int i, long int d, long int n)
{
long int current, result;
current = i;
result = 1;
for ( long int j = 0; j < d; j++ )
{
result = result * current;
result = result % n;
return result + 97;
getch();
5. Berikan link dari blog anggota kelompok anda!
6. Berikan referensi sumber dari materi!
https://gist.github.com/basavesh/3885594
DI akses pada 10 Desember 2018
A. Analisa Algoritma
1. Deskripsikan hubungan KSK dengan Kiriftografi algoritma Kelompok
dan algoritma kelompok lain yang
memiliki kemiripan cara kerja!
•Security
System atau keamanan sistem informasi merupakan hal yang sangat penting dalam
mengelola sistem informasi, tujuannya adalah untuk mencegah ancaman terhadap
sistem serta mendeteksi dan memperbaiki segala kerusakan sistem. Namun, masih
banyak kampus atau instansi tidak terlalu memperhatikan masalah keamanan ini.
•Semisal
: Data akademik yang merupakan data yang sangat penting di dalam perguruan
tinggi. Dengan data tersebut akan melancarkan berbagai urusan baik mahasiswa,
dosen dan pegawai kampus. Jika dirusak oleh orang yang tidak bertanggung jawab,
kampus akan kewalahan dalam memulihkan data tersebut. Bisa jadi data itu akan
hilang selamanya tidak bisa diperbaiki kembali.
•Penerapan
Keamanan Sistem Komputer dalam Bidang Pendidikan sampai sekarang masih
tergolong lemah, dikarenakan banyak pengguna yang lalai atau tidak peduli
dengan keamanan data mereka di lingkungan pembelajaran. Hal ini tidak menutup
kemungkinan akan adanya peretasan / pembobolan keamanan jaringan & kemanan
data.
•Untuk
mencegah hal yang tidak di inginkan maka Diterapkanlah Algoritma Vignere Cipher
ke data – data sensitif yang disimpan ke dalam Sistem Komputer. Dengan adanya
fungsi Enkripsi dari Algoritma Vignere Cipher ini maka, walaupun data di curi
oleh pihak luar, data data tersebut tidak dapat di baca karena masih dalam bentuk
Ciphertext. Pengguna lain, selain administrator yang tidak memiliki Key yang
dibutuhkan untuk men Dekripsikan data data tersebut tidak akan bisa membaca
Data dan Informasi yang sudah di Enkripsi, dengan ini Data dan Informasi masih
terjaga kerahasiaanya.
2. Jelaskan tentang Algoritma kelompok lain mulai dari: pengertian,
sejarah, cara kerjanya (proses ekripsi dan proses deskripsi), gambarkan
flowchart berikan penjelasan!
ALGORITMA
VIGNERE CIPHER :
*PENGERTIAN
DAN SEJARAHNYA :
•Vigenere
Cipher adalah suatu algoritma kriptografi klasik yang ditemukan oleh Giovan
BattistaBellaso. Beliau menuliskan metodenya tersebut pada bukunya yang berjudul
La Cifra del. Sig. GiovanBattista Bellaso pada tahun 1553. Nama vigenere
sendiri diambil dari seorang yang bernama Blaisede Vigenere. Nama vigenere
diambil sebagai nama algoritma ini karena beliau menemukan kunciyang lebih kuat
lagi untuk algoritma ini dengan metode autokey cipher meskipun algoritma
dasarnyatelah ditemukan lebih dahulu oleh Giovan Battista Bellaso.Algoritma ini
menjadi terkenal karenacukup sulit dipecahkan. Matematikawan Charles
LutwidgeDodgson menyatakan bahwa algoritma ini tidak terpecahkan. Pada tahun
1917, ilmuwan Amerikamenyebutkan bahwa Vigenere cipheradalah sesuatu yang tidak
mungkin untukditranslasikan.
*CARA
KERJA :
• Dalam Vigenere Chiper, digunakan suatu
sistem karakter (Character set) yang digunakan untuk mendefinisikan nilai
karakter-karakter yang digunakan dalam proses enkripsi maupun dekripsi. Sistem
karakter yang umum digunakan yaitu alfabet, dimana huruf A mewakili angka 0, B
mewakili angka 1, dan seterusnya hingga Z mewakili angka 26.
Proses
dasar pada Kriptografi :
1.Enkripsi,
adalah sebuah proses menjadikan pesan yang dapat dibaca (plaintext) menjadi
pesan acak yang tidak dapat dibaca (ciphertext).
•Ci = (Pi-Ki) mod 26
atau
•Ci = ( Pi + Ki ) – 26, kalau hasil
penjumlahan Pi dan Ki lebih dari 26
2.Dekripsi,
merupakan proses kebalikan dari enkripsi dimana proses ini akan mengubah
ciphertext menjadi plaintext dengan menggunakan algoritma "pembalik"
dan key yang sama
•Pi
= (Ci-Ki) mod 26
atau
•Pi
= ( Ci – Ki ) + 26, kalau hasil pengurangan Ci dengan Ki minus
KETERANGAN
:
Ci =
nilai desimal karakter ciphertext ke-i
Pi =
nilai desimal karakter plaintext ke-i
Ki =
nilai desimal karakter kunci ke-i
Nilai
desimal karakter: A=0 B=1 C=2 ... Z=25
*FLOWCHART
ENKRIPSI
1.Mulai
2.Input
Plaintext dan Key
3.Looping
For sebanyak panjang karakter dari Plaintext
4.Jumlahkan
Plaintext dan Key pada Index yang sama
5.Jika
hasil penjumlahan lebih dari 26, maka hasil dikurangi 26
6.Jika
tidak maka lanjutkan Looping
7.Tampilkan
Ciphertext
8.Selesai
DEKRIPSI
1. Mulai
2. Input Ciphertext dan Key
3. Looping For sebanyak panjang
karakter dari Ciphertext
4. Kurangi Ciphertext dan Key pada
Index yang sama
5. Jika hasil pengurangan kurang dari 0
(negatif), maka hasil ditambah 26
6. Jika tidak maka lanjutkan Looping
7. Tampilkan Plaintext
8. Selesai
3. Lakukan pengetesan kedua algoritma tersebut dengan menggunakan sintaks
bahasa pemrograman yang dipilih! Dengan inputan plantext berupa nama dan NIM
(prosen enkripsi dan deskripsi)!
menggunakan
Bahasa pemrograman C++
#include
<bits/stdc++.h>
using
namespace std;
int
main()
{
string charset="abcdefghijklmnopqrstuvwxyz";
int ukuranCharset = charset.length();
cout << "Keterangan : "
<< endl << endl
<< "1 : Enkripsi " <<
endl
<< "2 : Dekripsi" <<
endl << endl
<< ">";
int input;
cin >> input;
if (input==1) // input 1 berarti untuk enkripsi
{
string plaintext, key;
cin >> plaintext >>
key ; // input plainteks terlebih dahulu, lalu input key
char
chipertext[plaintext.length()]; // membuat chiperteks sebagai array berukuran
sama dengan plainteks
for (int i = 0; i <
plaintext.length(); i++)
{
int
indeksPlaintext, indeksKey;
for (int
j=0;j<ukuranCharset;j++)
{
//mencari
nilai dari karakter plainteks
if
(plaintext[i] == charset[j])
indeksPlaintext=j+1;
// karena indeks array basis 0, jadi ditambah 1 agar indeks 1
if
(key[i%key.length()]== charset[j])
indeksKey
= j+1; // karena indeks array basis 0, jadi ditambah 1 agar indeks 1
}
chipertext[i] =
charset[(indeksPlaintext+indeksKey)%ukuranCharset-1];
}
cout << chipertext;
}
else if (input==2) //input 2 berarti untuk
dekripsi
{
string chipertext, key;
cin >> chipertext >>
key; // input chiperteks terlebih dahulu, lalu input key
char
plaintext[chipertext.length()];
for (int
i=0;i<chipertext.length();i++)
{
int
indeksChipertext, indeksKey;
for (int
j=0;j<ukuranCharset;j++)
{
if
(chipertext[i] == charset[j])
indeksChipertext=j+1;
// karena indeks array basis 0, jadi ditambah 1 agar indeks 1
if
(key[i%key.length()]== charset[j])
indeksKey
= j+1; // karena indeks array basis 0, jadi ditambah 1 agar indeks 1
}
plaintext[i] =
charset[(indeksChipertext-indeksKey + ukuranCharset)%ukuranCharset-1];
// ditambah
ukuranCharset untuk menjamin nilai yang di mod tidak negatif, karena jika
negatif, maka hasil akan berbeda
}
cout << plaintext;
}
cin >> input; // agar program tidak
langsung tertutup
return 0;
}
4. Lakukan perbandingan kedua algoritma tersebut dengan menemukan 3
persamaan dan 3 perbedaan nya!
5. Berikan link dari blog anggota kelompo klain tersebut!
6. Berikan referensi sumber dari materi!
- http://sun-coolin.blogspot.co.id/2012/07/algoritma-kriptografi-klasik-vigenere-cipher.html
- https://id.wikipedia.org/wiki/Sandi_Vigenère
- www.academia.edu/.../Vigenere_Cipher_adalah_suatu_algoritma_kriptografi_klasik
- pendidikan-1993.blogspot.com/2012/01/keamanan-dalam-pendidikan.html
- www.deuhyoedergi.org/index.php/DEUHYOED/article/viewFile/422/422422
B. Buat kesimpulan berdasarkan penemuan persamaan dan perbedaan pada study
kasus A dan B
!