OOOO

Minggu, 09 Desember 2018

QUIS KSK TA 2018/2019

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 schemePadding 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
!

Tidak ada komentar:

Posting Komentar