1. Penjelasan dan Contoh Perhitungan
RSA
Studi Kasus:
Misalkan kita ingin mengenkripsi dan mendekripsi pesan "HELLO" menggunakan RSA.
Langkah Perhitungan:
-
Pilih Bilangan Prima:
- ( p = 61 )
- ( q = 53 )
-
Hitung ( n ) dan ( ϕ(n) ):
- ( n = p . q = 61 . 53 = 3233 )
- ( ϕ(n) = (p-1)(q-1) = 60 . 52 = 3120 )
-
Pilih ( e ):
- ( e = 17 ) (relatif prima terhadap 3120)
-
Hitung ( d ):
- ( d . e % ϕ(n) = 1 )
- ( d = 2753 ) (invers dari ( e ))
-
Enkripsi Pesan:
- Pesan "HELLO" -> Konversi ke angka (contoh: A=0, B=1, ..., Z=25)
- "HELLO" = 7 4 11 11 14
- Enkripsi setiap karakter:
- ( c = m^e % n )
- Untuk H (7): ( c = 7^{17} % 3233 )
-
Dekripsi:
- ( m = c^d % n )
Contoh Kode Python:
def mod_exp(base, exp, mod):
return pow(base, exp, mod)
p = 61
q = 53
n = p * q
phi_n = (p - 1) * (q - 1)
e = 17
d = 2753
# Enkripsi
message = "HELLO"
ciphertext = [mod_exp(ord(char) - 65, e, n) for char in message]
# Dekripsi
decrypted = ''.join(chr(mod_exp(c, d, n) + 65) for c in ciphertext)
print(f'Ciphertext: {ciphertext}')
print(f'Decrypted: {decrypted}')
AES
Studi Kasus:
Kita akan mengenkripsi pesan "HELLO" menggunakan AES.
Langkah Perhitungan:
-
Kunci:
- Kunci 128-bit:
0123456789abcdef
- Kunci 128-bit:
-
Padded Data:
- Pesan "HELLO" -> Padding hingga 16 byte: "HELLO\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b"
-
Enkripsi:
- Gunakan AES dalam mode CBC (Cipher Block Chaining).
-
Dekripsi:
- Lakukan dekripsi menggunakan kunci yang sama.
Contoh Kode Python:
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import os
key = b'0123456789abcdef'
cipher = AES.new(key, AES.MODE_CBC)
plaintext = b'HELLO'
padded_data = pad(plaintext, AES.block_size)
ct_bytes = cipher.encrypt(padded_data)
# Dekripsi
cipher_dec = AES.new(key, AES.MODE_CBC, cipher.iv)
decrypted = unpad(cipher_dec.decrypt(ct_bytes), AES.block_size)
print(f'Ciphertext: {ct_bytes.hex()}')
print(f'Decrypted: {decrypted.decode()}')
DSA
Studi Kasus:
Kita akan menandatangani pesan "HELLO" menggunakan DSA.
Langkah Perhitungan:
-
Kunci:
- ( p ) dan ( q ) adalah bilangan prima yang sesuai.
- Pilih ( x ) secara acak sebagai kunci privat.
-
Tanda Tangan:
- Hitung hash dari pesan.
- Hitung ( r ) dan ( s ) berdasarkan langkah-langkah DSA.
Contoh Kode Python:
from Crypto.Signature import DSS
from Crypto.PublicKey import DSA
from Crypto.Hash import SHA256
key = DSA.generate(2048)
message = b'HELLO'
h = SHA256.new(message)
# Tanda Tangan
signature = DSS.new(key, 'fips-186-3').sign(h)
# Verifikasi
verifier = DSS.new(key.publickey(), 'fips-186-3')
verifier.verify(h, signature)
print(f'Signature: {signature.hex()}')
2. Studi Kasus Penggunaan di Arduino
RSA di Arduino
Studi Kasus:
Menggunakan RSA untuk mengamankan komunikasi antara Arduino dan PC.
Contoh Kode:
#include <Arduino.h>
#include <RSAPublicKey.h>
void setup() {
Serial.begin(9600);
// Inisialisasi kunci publik
const char *publicKey = "YOUR_PUBLIC_KEY_HERE";
RSAPublicKey rsaPublicKey(publicKey);
// Enkripsi pesan
const char *message = "HELLO";
byte ciphertext[256];
int cipherLen = rsaPublicKey.encrypt((byte *)message, strlen(message), ciphertext);
Serial.print("Ciphertext: ");
for (int i = 0; i < cipherLen; i++) {
Serial.print(ciphertext[i], HEX);
Serial.print(" ");
}
}
void loop() {}
AES di Arduino
Studi Kasus:
Menggunakan AES untuk mengenkripsi data sensor.
Contoh Kode:
#include <AES.h>
#include <Crypto.h>
AES aes;
void setup() {
Serial.begin(9600);
byte key[16] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10};
byte plaintext[16] = "HELLO WORLD!!!";
byte ciphertext[16];
aes.do_aes_encrypt(plaintext, 16, ciphertext, key, 128);
Serial.print("Ciphertext: ");
for (int i = 0; i < 16; i++) {
Serial.print(ciphertext[i], HEX);
Serial.print(" ");
}
}
void loop() {}
DSA di Arduino
Studi Kasus:
Menggunakan DSA untuk menandatangani data yang diterima dari sensor.
Contoh Kode:
#include <DSA.h>
void setup() {
Serial.begin(9600);
DSA dsa;
// Gen kunci DSA
dsa.generateKeys();
// Tanda tangan pesan
const char *message = "HELLO";
byte signature[40];
dsa.sign(message, signature);
Serial.print("Signature: ");
for (int i = 0; i < 40; i++) {
Serial.print(signature[i], HEX);
Serial.print(" ");
}
}
void loop() {}
Top comments (0)