Fungsi Kriptografi pada Arduino (SHA)
SHA atau Secure Hashing Algorithm merupakan fungsi kriptografi yang dirancang khusus oleh penyedia otoritas kemanan internet untuk menjaga keamanan data. SHA ini bekerja dengan cara melakukan transformasi data menggunakan fungsi HASH. Berbeda dengan fungsi Encrypt dan Decrypt, HASH bukanlah fungsi 2 arah yang dapat mengembalikan data menjadi bentuk aslinya. Hash merupakan algoritma yang terdiri dari operasi bitwise (ini berkaitan dengan fungsi besaran bit enkripsi), penambahan modular dan fungsi kompresi. Fungsi hash akan menghasilkan fungsi acak yang tidak terlihat seperti aslinya.
Dalam pemrograman embed seperti Arduino, Anda dapat menggunakan fungsi HASH menggunakan library Hash.h dengan SHA1
Fungsi Hash merupakan fungsi satu arah yang tidak dapat diubah menjadi nilai aslinya. Hash masing-masing data tergantung tingkat bit enkripsi yang akan digunakan. Ada beberapa SHA yang sering digunakan yakni SHA 1, SHA 2 dan SHA 256. Masing-masing SHA memiliki tingkat enkripsi yang berbeda dengan tingkat kerentanan yang berbeda.
SHA 1 dikembangkan pada tahun 1993 oleh lembaga standar pemerintah Amerika Serikat yakni National Institute of Standard and Technologi (NIST).
SHA 1 akan menghasilkan fungsi hash 160 bit dengan panjang kurang dari 2^64 bit. Ini merupakan standard keamanan yang masih rendah.
Pada tahun 2005 ditemukan kerentanan pada algoritma SHA 1 ini yang dapat membahayakan keamanan data lalu pada tahun 2010 perusahaan besar seperti Microsoft, Google, dan Mozilla mengumumkan bahwa mereka tidak lagi support dengan penggunaan SHA 1 sebagai keamanan data pada browser mereka.
Saya sering memanfaatkan fungsi Hash ini untuk membuat HWID (Hardware ID#) untuk memproteksi firmware dari pembajakan dan penggandaan. Berikut contoh penerapan Hash SHA1 pada mikrokontroller ESP8266.
#include <ESP8266WiFi.h>
#include "Hash.h"
WiFiClient client;
void setup() {
Serial.begin(19200);
delay(10);
String id = sha1(WiFi.macAddress());
int idLen = id.length() + 1;
char chipID[idLen];
id.toCharArray(chipID,idLen);
Serial.print("Generating HWID#...");
for(int i = 0; i < 32; ++i)
{
Serial.print(".");
delay(100);
}
Serial.println("OK");
Serial.print("HWID#: ");
Serial.println(chipID);
Serial.println(ESP.getFreeHeap(),DEC);
Serial.println();
Serial.println();
Serial.println("--- COPY FROM HERE --->>>");
Serial.print(sizeof(chipID)-1, DEC);
Serial.print("20");
for (int i = 0; i
Serial.println("--- COPY TO HERE ---<<<");
Serial.println();
Serial.println();
}
void loop()
{
}