[TechDebt] Bongkar Navajo-Swift
Membuat Dynamic Password Strength Meter dengan Entropy. Yaitu menghitung estimasi kompleksitas operasi tertentu terhadap sebuah String.
Kembali lagi pada kemalasan untuk mengulangi sebuah kode pemrograman, sehingga terlintas ide bagaimana kita bisa membuat sebuah kode mengenai validasi String (password, email ataupun PIN) tanpa harus mengulang kode tersebut.
Dan kita bisa menambahkan atau mengurangi validasi secara dinamis sesuai dengan kebutuhan, contoh :
- Pada aplikasi A saya hanya membutuhkan minimum Character 8 dan maximum 20 pada password dan minimal mempunyai satu huruf kapital
- Sedangkan pada aplikasi B, semua validasi di aplikasi A dipakai hanya saja kita perlu menambahkan validasi Symbol pada aplikasi B
Oke masuk ke pengaplikasian-nya, setelah baca beberapa artikel, Chat GPT dan cari framework/library orang munculah Navajo-Swift ini.
Kembali lagi jangan asal pakai library orang tanpa tahu dasarnya, karena nanti akan menimbulkan masalah jika ada bug dari library tersebut.
Pada Library tersebut menggunakan PasswordRule sebagai protocol nya, sehingga kombinasi Rule password bisa kita ubah-ubah sesuai kebutuhan aplikasi
Perhatikan contoh diatas,
- Pada aplikasi A kita hanya menambahkan lengthRule dan uppercaseRule
- Sedangkan pada aplikasi B kita menambahkan lengthRule, uppercaseRule dan symboleRule
Dengan begitu kode kita akan benar-benar dinamis sesuai dengan kebutuhan, begitu juga ketika kita akan mengimplementasi hal tersebut pada validasi Email atau-pun PIN, contoh ketika kita ingin menambahkan email regex pada Rule.
Selanjutnya ketika kita sudah bisa menggunakan Rule kita masuk ke Entropy
Navajo-Swift menggunakan 5 level password Strength yaitu
- veryWeak
- weak
- reasonable
- strong
- veryStrong
Dan hal tersebut dihitung berdasarkan jumlah Character yang digunakan ketika membuat password
Ketika lowercase digunakan sizeOfCharacter akan ditambahkan 26 sesuai dengan jumlah alphabet begitu juga ketika uppercase digunakan.
Ketika digit atau number digunakan maka akan ditambahakan 10 sesuai jumlah atau representasi angka.
Begitu-pun seterusnya untuk punctuation dan lainnya.
Entropy dihitung menggunakan rumus log2f(sizeOfCharacterSet) * Float(string.count), kemudian hasil Entropy akan dikalsifikasikan menjadi 5 level Strength tadi.
Sebenarnya Strength bisa dihitung berdasarkan kebutuhan dari setiap Aplikasi, menurut saya penggunaan Entropy ini juga sangat bagus karena untuk melakukan Bruteforce pasti akan menggunakan berbagai macam kombinasi dengan menghitung Entropy berdasarkan jumlah character kita bisa mengklasifikasikan Strength sebuah password secara detail.
Kesimpulan
Sebelumnya kita seringsekali menggunakan regex hanya untuk melakukan Character matching pada hal yang sederhana seperti
- Apakah String mengandung Angka
- Apakah String mengandung Symbol
- Apakah String mengandung UpperCase
- Apakah String mengandung LowerCase
Padahal itu merupakan filtering yang sederhana, seharusya tanpa menggunakan Regex pun bisa
Kecuali ketika kita membutuhkan pengecekan String dengan kondisi yang lebih rumit seperti Email, Phone number dll.
Hal tersebut terjadi karena email memiliki kebutuhan akan format tertentu. Selain itu ketika kita menggunakan Regex ada kemungkinan beberapa Character yang tertinggal atau lupa kita tambahkan.