CIMB. Isu Kata Laluan

Masalah CIMB yang viral pada pagi ini adalah berkisar dua perkara pokok iaitu:

  1. Dapat log masuk ke dalam sistem CIMB Clicks walaupun kata laluan anda salah
  2. Terdapat caj kepada kad debit melalui PayPal

Penulisan ini bukan berkisar tentang perkara kedua kerana perkara kedua saya tidak mempunyai kefahaman yang begitu jelas bagaimana ia berlaku. Tetapi hanya akan memfokuskan perkara pertama sahaja iaitu dapat log masuk walaupun kata laluan salah.

Fakta kes

Terdapat ramai yang mengatakan bahawa mereka dapat log masuk ke dalam CIMB Clicks walaupun kata laluan yang mereka letak adalah salah. Tetapi jika dilihat secara terperinci kesemua yang mendakwa tersebut berdasarkan satu kenyataan yang ditularkan bahawa jika pengguna menambah aksara (character) selepas aksara kata laluan yang sebenar, maka kata laluan tersebut akan diterima.

Gambar daripada Twitter yang disebar ramai

[ kata laluan sebenar ] + [ aksara tambahan ] = [ kata laluan baru ]

Dalam kata lain, jika Maimunah sebagai contoh mempunyai kata laluan CIMB Clicks iaitu m00n2018 dan dia menambah aksara tambahan iaitu hensem pada kata laluannya menjadi m00n2018hensem maka CIMB akan membenarkannya log masuk ke dalam CIMB Clicks.

m00n2018 + hensem = m00n2018hensem

Secara teknikalnya, CIMB membenarkan pengguna yang memasukkan kata laluan yang salah log masuk ke dalam sistem dan itu adalah satu kerentanan sekuriti sistem yang serius. Kerana sepatutnya sebarang input daripada pengguna tidak boleh dipangkas apatah lagi berkaitan dengan kata laluan. Tetapi daripada kes CIMB saya nampak masih boleh diterima pada ketika ini.

Q: Adakah itu tanda CIMB telah di godam?

A: Tidak. Anda masih memerlukan 8 aksara pertama sebagai kata laluan yang sah untuk log masuk ke dalam sistem. Kata laluan anda masih tidak bertukar cuma input daripada anda ditukarkan oleh sistem CIMB untuk memenuhi keperluan algoritmanya (rujuk bahagian algoritma kata laluan CIMB).

Algoritma Kata Laluan CIMB

Secara jelas disini kemungkinan besar CIMB menggunakan satu algoritma untuk mencincang (hashed) kata laluan dalam bentuk text asal kepada satu text yang lebih komplek yang mempunyai limitasi kepada 8 aksara alpha-numeric sahaja. Ada yang mencadangkan algoritma tersebut adalah DESData Encryption Standard. Disebabkan perkara itu, apabila pengguna memasukkan kata laluan lebih daripada 8 aksara, kata laluan tersebut perlulah dipangkas (truncate) terlebih dahulu menjadi 8 aksara sahaja bagi membolehkan algoritma tersebut berjalan.

Seperti contoh Maimunah tadi, walaupun kata laluan yang dimasukkan adalah m00n2018hensem tetapi apabila dihantar kepada sistem, CIMB telah memangkas input tersebut menjadi m00n2018 sahaja dan secara kebetulan sama seperti kata laluan asalnya dan apabila dicincang, hasil cincangannya adalah sama seperti cincangan asal. Dengan itu membolehkan sistem membenarkan pengguna tersebut log masuk ke dalam sistem.

Pelbagai jenis algortima

Terdapat pelbagai jenis algoritma yang wujud di dalam dunia ini. Masing-masing mempunyai kepelbagaian, kebaikkan dan kekurangan untuk disesuaikan dengan kes setiap sistem. Seperti contoh DES adalah satu salah algoritma yang wujud. Contoh lain adalah md5, Mcrypt, Bcrypt dan yang sedang meningkat naik sekarang adalah Argon2ID. Setiap algoritma ini akan menghasilkan cincangan yang berlainan walaupun kata asalnnya adalah sama. Seperti contoh hasil cincangan untuk perkataan “test”:

JenisHasil
md5098f6bcd4621d373cade4e832627b4f6
Bcrypt$2y$10$gZQewKePBNvFY91sx9U6yO5Vjtc0qwOBN9RL5YG0Rx0DMT1IcbpTS
Argon2I$argon2i$v=19$m=2048,t=4,p=3$RkVZeVVEQWY2T2lsVHVlNg$rPnuhDtu0dofpWfoeh4ENTtm3EcYIXy5ZPeFxvboqNs

Daripada pemerhatian saya, CIMB kini mempunyai setidaknya dua jenis algortima yang kita boleh kategorikan kepada:

  1. Algo lama
  2. Algo baru

Algo lama adalah algoritma yang digunakan oleh pengguna yang mempunyai masalah boleh-log-masuk-walaupun-kata-laluan-salah sejak pagi tadi. Kemungkinan besar dahulu tiada masalah untuk menggunakan algoritma ini kerana terhad kepada 8 aksara sahaja dan penjanaan cincangan yang laju untuk pengesahan pengguna. Akan tetapi kelemahannya adalah terhad kepada 8 aksara input, hanya boleh menerima input alpha-numeric sahaja bermaksud tiada karakter khas seperti [email protected]#$% boleh digunakan sebagai kata laluan. Ini juga merupakan satu isu sekuriti yang mana sepatutnya pada kita menuju ke zaman kereta terbang, kata laluan tidak hanya terhad kepada alpha-numeric sahaja apatah lagi terhad kepada 8 aksara.

Algo baru adalah algoritma yang digunakan oleh CIMB Click sekarang ini. Disebabkan keperluan semasa, maka pengguna boleh menentukan panjang kata laluan sendiri diantara 8 hingga 20 aksara dan memasukkan karakter khas ke dalam kata laluan. Bukan hanya alpha-numeric sahaja seperti algo lama. Mungkin kelemahan algoritma ini memerlukan sumber perkomputeran yang lebih tinggi (sekitar beberapa milisecond, mungkin microsecond dan keperluan memori yang lebih tinggi mungkin sekitar 1-2 kilobyte) daripada algo lama. Walaupun kecil bagi pengguna biasa, tetapi untuk skala besar seperti bank setiap sumber itu amat berharga apatah lagi masa. Tetapi mungkin dengan kemampuan perkomputeran yang lebih baik, masalah ini telah diatasi kini.

Maka pengguna CIMB sekarang ini sedang di dalam fasa pemindahan daripada algo lama kepada algo baru. Perkara yang aku kurang pasti adakah pihak CIMB tidak memberikan notis awal kepada penggunanya untuk bersedia dalam penukaran kata laluan ini. Penafian: Saya tak guna CIMB Click.

Q: Adakah algoritma lain mempunyai had input seperti algo lama?

A: Ada. Contohnya Bcrypt hanya mengambil 72 karakter input sahaja dan membuat pangkasan kepada karakter yang selebihnya.

contoh di mana cincangan yang dicipta oleh brcypt adalah sama untuk teks yang melebihi 72 aksara.

Had tersebut dibuat untuk mempercepatkan proses cincangan dimana rata-rata maksima kata laluan pengguna adalah sekadar 64 aksara dan juga mengurangkan masa, keperluan komputer seperti CPU dan memori. Walaupun OWASP mencadangkan had maksima kata laluan boleh menjangkau sehingga 128 aksara.

Q: Jika saya tukar kepada kata laluan kepada algo baru, adakah selepas itu CIMB akan masalah “kata laluan betul walaupun salah” ini akan berlaku lagi?

A: Sepatutnya tidak, kerana keperluan kedua-dua algo tersebut adalah berlainan. Melainkan jika algo baru juga mempunyai had input maksima yang pendek iaitu 20 dan akan datang jika had kata laluan di naikkan kepada 30, maka masalah ini akan berlaku lagi.

Q: Jika ada dua algoritma, macam mana CIMB tahu algoritma mana nak guna untuk kata laluan saya?

A: Perkara ini saya tidak dapat terangkan lebih lanjut kerana info terperinci lebih diketahui oleh pihak CIMB. Tetapi selalunya kita akan membezakannya berdasarkan “tandatangan” yang dicipta semasa kita mencincang input tersebut seperti contoh di atas; bcrypt menggunakan $2y sebagai tandatangan dan argon2 menggunakan $argon2i. Dengan ini sistem sepatutnya boleh mengetahui apakah jenis algortima yang perlu digunakan untuk menyemak adakah kata laluan yang diisi oleh pengguna itu sama dengan yang disimpan di dalam pangkalan data.

Q: Ada yang kata CIMB tak cincang kata laluan tetapi letak sebagai teks asal (plain text).

A: Perkara ini juga saya tidak dapat sahkan kerana itu perlu melihat terus ke dalam pangkalan data CIMB. Tetapi saya lihat masalah aksara tambahan tersebut boleh berlaku sama ada input dicincang mahupun tidak dicincang maka saya meletakkan harapan bahawa CIMB menyimpan data kata laluan penggunanya dengan betul.

Termasuklah data yang hilang dahulu.

Q: Kenapa saya masih boleh log masuk guna kata laluan lama.

A: Pihak CIMB tidak menukarkan secara automatik kata laluan anda daripada cincangan lama kepada yang baru di atas beberapa perkara (saiz input, peraturan kata laluan baharu, ralat pada tekaan, dll.) dan keadaaan yang memungkinkan berlakunya kesilapan. Maka mereka memerlukan anda untuk membuat penukaran kata laluan secara manual. Apabila keadaan panik ini sudah reda, sila tukar kata laluan anda kepada yang lebih baik, sepanjang yang boleh.

Q: Adakah algo lama (DES) menyebabkan CIMB mudah di godam?

A: Saya tidak nampak sebarang kaitan tentang perkara tersebut buat masa ini.

Q: Berapakah had yang sesuai untuk saya letak kata laluan baru saya?

Sekurang-kurangnya 10 aksara kerana 8 sebenarnya adalah kata laluan yang lemah. Jika mampu panjangkan kepada 20.

Kesimpulan

Masalah penukaran algoritma ini menyebabkan pihak pengguna menjadi panik. Apatah lagi melibatkan duit. Tidak pasti adakah maklumat telah disampaikan sepenuhnya sebelum langkah penukaran tersebut diambil.

Saya tak bercadang menerangkan tentang bruteforce untuk bypass reCaptcha, man-in-middle attack pada TAC SMS server, buffer overflow dan sebagainya kerana saya tiada pengetahuan tentang itu. Kita serahkan pada yang pakar.

Laravel, date & sqlsrv

Kes: Aku gunakan Laravel, database sqlsrv yang diletakkan di dalam Docker kerana gunakan MacOS. Aku perlu dapatkan data daripada medan berjenis date atau datetime eg created_at.

Apabila aku tarik data daripada sistem, jenis format yang dikeluarkan tidak dalam bentuk biasa iaitu, Jan 10 2018 12:00:00:AM. Selalunya apa yang akan dikeluarkan adalah seperti 2018-01-10 atau 2018-01-10 12:00:00. Masalah ini tidak berlaku jika kita buat direct query kepada database. Tetapi hanya apa bila melalui eloquent.

Install pdo_sqlsrv. Untuk itu, aku rujuk kepada laman microsoft sendiri.

Kemudian apabila buat query sekali lagi akan keluar error lain pula. pdo_sqlsrv_db_handle_factory: Unknown exception caught.

Untuk masalah itu aku rujuk kepada komen di dalam github ini. Selepas itu tiada masalah.

Laravel Primary Key As String

Ada ketika primary key kita akan gunakan string bukannya integer maka kita perlu beritahu di dalam model bahawa “laravel, sila casting primary key ini sebagai string” jika tidak secara lalainya adalah integer.

Contoh kes. Primary key kita adalah seperti ini:

338243066987929_338331833652219

Apabila kita menggunakan eloquent untuk mengeluarkan primary key tersebut, key tersebut akan terputus apabila terjumpa karakter bukan nombor dan menjadi seperti ini:

338243066987929

Apa yang kita perlu buat adalah tetapkan di dalam model, casting untuk primary key tersebut adalah string.

protected $casts = [
'id' => 'string',
];

Maka primary key tersebut akan dikeluarkan dengan betul selepas itu.

4 Teori

Dapatan aku daripada permainan Kerbal Space Program, aku berpendapat terdapat 3 perkara yang mungkin terjadi kenapa perkara seperti gambar di bawah terjadi. Tetapi merujuk kepada satu perkara yang sama iaitu daya angkat.

  1. Tekanan atmosfera yang rendah
  2. Masalah enjin yang tidak memberikan daya angkat
  3. Masalah aerodinamik
  4. Berat berlebihan

Tekanan atmosfera yang rendah dapat kita abaikan kerana mengikut laporan pihak di sana, cuaca baik.

Masalah enjin mungkin berlaku atas beberapa sebab seperti enjin memang tidak berfungsi dengan baik, enjin tiba-tiba rosak atas beberapa perkara seperti mekanikal mahupun kesan luaran (kemasukkan burung dan sebagainya)

Masalah aerodinamik yang mungkin juga berlaku atas sebab mekanikal (fatigue) mahupun kesan luaran (burung, banggunan). Tetapi kita boleh mengabaikan kesan fatigue kerana pesawat ini amat baru.

Berat berlebihan yang salah perkiraan juga mungkin berlaku tetapi sepatutnya hal tersebut telah lama dimasukkan ke dalam SOP penerbangan dan dengan pesawat yang baru sebegitu aku rasa sudah lebih canggih sistemnya. Kita tolak ketepi, tetapi jangan abaikan.

Nota: Aku tidak meletakkan sebarang kata kunci khas yang merujuk kepada kemalangan tersebut kerana ini hanya pendapat sendiri. Tiada sebarang nombor-nombor yang boleh dikeluarkan sebagai sandaran.

Ganti Redis:: dengan Cache::

Jika anda mempunyai kemampuan untuk pasang ext-redis kepada PHP anda, maka anda tidak perlu menggunakan Redis:: tetapi cukup menggunakan Cache:: sahaja.

Perubahan yang perlu dibuat adalah tukar cache setting didalam .env daripada file kepada redis.

CACHE_DRIVER=redis

Kemudian ubah kod yang sebelum ini adalah panjang:

// app/Http/Repositories/AnnouncementRepository.php

public static function getActiveAnnouncements($date)
{
	$announcements = Redis::get('announcements:active');

	if ($announcements == null) {
		$announcements = Announcement::where('start_at', '<=', $date)
		->where('end_at', '>=', $date)
		->get();

            // make it expired every 6 hours
		Redis::set('announcements:active', $announcements, 43200);
	} else {
		$announcements = json_decode($announcements);
	}

	return $announcements;
}

Kepada yang lebih pendek:

// app/Http/Repositories/AnnouncementRepository.php

public static function getActiveAnnouncements($date)
{
return Cache::remember('announcements:active', 360, function () use ($date) {
return Announcement::where('start_at', '<=', $date)
->where('end_at', '>=', $date)
->get();
});
}

Kebaikkannya adalah dengan menggunakan Redis:: data yang diberikan adalah bentuk json string tetapi menggunakan Cache:: data yang dipulangkan kepada kita adalah di dalam bentuk collection.

Atur Cara

Peka Bahasa DBP

Petang ini akaun Twitter DBP ada mengeluarkan satu lembaran Peka Bahasa yang mana aku tertarik dengan perkataan atur cara. Aku terfikir, mengapa atur cara dijarakkan tetapi pengaturcaraan dirapatkan. Adakah kerana imbuhan peng-...-an tersebut menyebabkan perkataan pengaturcaraan tidak boleh berdiri dengan sendiri dan perlu dirapatkan menjadi satu perkataan. Tetapi jika imbuhan tersebut hanya peng- sahaja dia masih boleh berdiri dengan sendiri sebagai contoh kes ini, pengatur cara.

Dewan Bahasa Edisi Keempat

  • Jadual pelbagai acara (kegiatan dsb) yg telah ditetapkan utk dilaksanakan (biasanya dlm sesuatu upacara, persidangan, persembahan, dll)
  •  (Komp) urutan arahan berkod yg dimasukkan ke dlm komputer yg membolehkan data diproses (oleh komputer); pengaturcaraan (Komp) proses membuat atur cara komputer
  • Pengatur cara 1. orang yg mengendalikan sesuatu majlis; 2. (Komp) orang yg menganalisis sesuatu masalah dan menulis atur cara supaya data yg berkaitan boleh di-proses oleh komputer.

Kes yang sama adalah mudah cara, pemudah cara, pemudahcaraan. Sungguh benar, tatabahasa aku dah karat.

Hapus data, adakah masih perlu?

Semasa aku belajar dahulu untuk setiap sistem secara asasnya mempunyai empat fungsi teras. C.R.U.D.

  • C – Create (cipta)
  • R – Retrive/Read (capai kembali)
  • U – Update (kemaskini)
  • D – Delete (hapus)

Namun, pada zaman kini aku berpendapat sudah sampai masanya untuk kita menukar fungsi yang keempat daripada D iaitu delete atau hapus kepada S – Soft-delete atau hapus secara aplikasi tetapi bukan secara fizikal. Dengan kata lain yang lebih mudah, secara dalam aplikasi pengguna akan menganggap data tersebut dihapuskan kerana tidak dapat dicari melalui paparan sistem. Tetapi secara fizikal di dalam pangkalan data, datanya masih wujud.

is_deleted

Aku mula mempraktikkan kaedah soft delete ini daripada dulu tetapi secara kaedah boolean is_deleted. Data yang disimpan selalunya hanya bersifat 0 atau 1 iaitu 0 – tidak atau false, manakala 1 bermaksud ya atau true.

idNamais_deleted
1Ali1
2Abu0

Dalam contoh table di atas, Ali telah dijadikan sebagai soft delete yang mana datanya dianggap tidak ada di dalam paparan pengguna tetapi secara fizikalnya masih ada dan tidak dihapuskan secara sebenar. Antara kegunaan kaedah ini adalah selain daripada dapat menghilangkan paparan data Ali kepada pengguna sistem, aku juga dapat mengekalkan data yang berkaitan dengan Ali dan juga dapat mengembalikan data Ali jika perlu ke dalam sistem dalam kes-kes tertentu seperti rollback.

Tetapi kaedah ini memerlukan aku menambah setiap query kepada pangkalan data dengan membuat pemeriksaan data ... where is_deleted != 1. Itu semua sebelum datangnya Laravel.

Soft Delete di dalam Laravel

Laravel memperkenalkan kaedah soft delete yang lebih mudah daripada apa aku buat sebelum ini. Aku hanya perlu membuat beberapa perkara dan aku boleh gunakanya:

  1. Tambah deleted_at kepada table sedia ada
  2. Suntik fungsi soft delete ke dalam modul untuk memberitahu Laravel bahawa kita mahu gunakan fungsi soft delete untuk modul tersebut.

Dan selepas itu siap. Anda boleh gunakan terus fungsi soft delete tanpa mengubah apa-apa kod yang sebelum ini. Kaedahnya masih sama seperti contoh:

idnamadeleted_at
1Ali2018-09-23 22:00:00
2Abunull

Maka apabila anda membuat query kepada pangkalan data, Eloquent akan menambah secara automatik satu where untuk mencari data yang mempunyai nilai deleted_at is null sahaja. Dan apabila ditambah dengan kecanggihan Eloquent, anda terus dapat menapis segala data yang berkaitan dengan Ali walaupun berkaitan dengan table yang lain.

Anda masih boleh mengeluarkan data Ali secara paksa dengan menggunakan arahan ->withTrashed() ke dalam Eloquent dan semua data akan dikeluarkan termasuklah yang di hapus menggunakan soft delete.

Intergriti Data

Antara sebab kenapa aku amat memberatkan fungsi soft delete di dalam sistem lebih lagi yang menggunakan Laravel (sebab mudah) adalah kerana bagi aku setiap data yang masuk ke dalam sistem (yang live), sama ada itu adalah data contoh mahupun data spam tidak boleh dibuang. Apatah lagi data yang berkaitan maklumat di dalam server yang sensitif seperti audit trail, log kronologi, evaluation ataupun data transaction yang melibatkan wang. Ini dapat memastikan bahawa sesebuah sistem itu mempunyai intergriti data yang baik.

Ada sesetengah daripada sistem yang aku jaga, tetapan untuk pengguna pangkalan data yang digunakan untuk sistem juga tidak mempunyai fungsi hapus (delete) kecuali kepada beberapa table seperti reset password, token, queue dan seumpamanya yang memerlukan kita membuang data yang telah selesai kerja. Tetapi selain daripada itu memang tiada istilah buang data daripada pangkalan data.

Data banyak tak berat ke?

Data banyak tidak dinafikan akan memberikan impak kepada sistem tetapi kita hidup di zaman big data dan zaman kini mempunyai banyak cara untuk memastikan data yang banyak tidak menyebabkan sistem menjadi terlalu lambat. Contohnya sharding, partitioning, dan archiving. Maka aku tidak nampak kenapa data perlu di buang.

Notakaki

Dah lama nak tulis tetapi selepas JomLaunch 6.0 aku rasa perlu untuk aku tuliskan di dalam blog.

Jambangan Bungamu Tersiksa

Apa yang dimaksudkan “jambangan bungamu tersiksa” dalam lagu Ben Nathan, Tak Mungkin Ku Lepas Pergi?

Dulu pernah ku berkata sayang
Tak mungkin ku menanti lagi
Usiamu pun meningkat jua
Jambangan bungamu tersiksa

Aku dah pernah dengar lagu ini beberapa kali tetapi aku masih tidak dapat mencari maksud yang kena dengan rangkap tersebut. Kenapa jambangan bunga?

Adakah bermaksud seri sebagai seorang perempuan? Jika tentang seri mungkin juga ingin mengatakan semakin tua seseorang perempuan itu, serinya semakin layu? Tetapi kenapa dia tak mahu berkahwin sahaja. Adakah kerana tidak bersedia untuk berkahwin. Kerana kita sedang berkata tentang keadaan zaman dahulu yang mana orang kahwin awal. Bukan seperti sekarang.

Adakah bermaksud kemanisan dalam hubungan? Tetapi jika hanya tentang perhubungan takkan diletakkan rangkap “usiamu pun meningkat jua”. Adakah pula tentang simbol kesuburan? Tetapi kalau hanya tentang kesuburan tak nampak kenapa ayat “tersiksa” digunakan disitu.

Yang aku dapat fikirkan adalah perempuan tersebut pernah curang kepadanya dan kini telah dikecewakan oleh lelaki tersebut dan Ben dalam kisah ini mengambilnya kembali dari keadaan kekecewaan. Ini agak logik kerana terdapat rangkap di bawahnya:

Dulu pernah ku berkata dewi
Tak mungkin ku menunggu lagi
Tapi kini ku sedari hati
Tak mungkin ku lepas kau pergi

Jika diambil dalam sudut pandang ini, seperti ada kesinambungan dengan lagu Jamal Abdillah, Bunga Pujaan (aku lebih minat versi Jamal Abdillah dari Eddy Silitongga). Yang keduanya menceritakan tetang kekasih yang telah pergi meninggalkan mereka dah dikecewakan pula oleh orang lain.

Akan ku biarkan tak sampai dihati
Bunga jadi kupetik akhirnya

Bunga Pujaan, Jamal Abdillah

Jambangan

Perkataan “jambangan” digunakan dan bukannya kuntuman. Selalunya perempuan itu diibaratkan sebagai sekuntum bunga bukannya tempat letak bunga seperti pasu. Adakah sebernarnya lagu ini adalah lagu untuk perempuan kepada lelaki bukannya sebaliknya dengan menjadikan lelaki tersebut adalah tempat letak kuntuman bunga (perempuan)? Mungkin juga tidak kerana jika kita ikut pantun ini;

Sirih puan depan tangga,
Menyambung datang orang marhaban;
Tanya puan dijawab duka,
Bunga di jambangan telah kepunyaan

Kurik Kundi Merah Saga, DBP

atau seperti pantun ini

Pergi ke perigi mengambil timba,
Timba terletak tepi halaman;
Walaupun banyak kembang di rimba,
Mawar di jambangan jadi idaman.

Kurik Kundi Merah Saga, DBP

Daripada pantun ini seolah-olah jambangan tersebut adalah ibu bapanya yang menjaga bunga agar kekal segar dan cantik sebelum dipindahkan kepada jambangan yang lain (suaminya). Jika ini diambil kira, maksudnya ibu bapa kepada perempuan tersebut tersiksa untuk menjawab pertanyaan orang kenapa anak daranya masih belum berkahwin sedangkan usianya meningkat. Itu logik dengan keadaan orang zaman dahulu.

Setakat ini, aku rasa yang terakhir itulah jawapannya.

Rehash Password

Bilakah masa yang kita perlu hash semua (rehash) kata laluan kita?

Setakat ini saya hanya jumpa satu masa sahaja iaitu apabila kita menukar sebarang setting kepada teknik hash sama ada faktor kerja (eg. ulangan) atau kita menukar algoritma atau library hash itu sendiri (eg. Bcrypt kepada Argon)

Pemeriksaan sama ada kata laluan tersebut memerlukan hash semula atau tidak hanya dibuat apabila pengguna membuat log masuk ke dalam sistem dengan menggunakan kata laluan sedia ada. Contoh kes, Ali mempunyai kata laluan “rahsia” untuk log masuk ke dalam sistem. Pada tahun lepas, hash untuk kata laluan Ali tersebut adalah 

$2y$10$3xEVXIUumHCpZU59ZJFoJuOs3lED9ZaNaszlzX71YVETC.tR/W8d.

Menggunakan Bcrypt, dengan faktor kerja ulangan sebanyak 10 ulangan. (rujuk $2y$10 di hadapan hash). Tetapi pada tahun ini, sistem telah menukar algoritma kata laluan kepada Argon dengan faktor kerja memori 1024, bebenang 2, dan masa adalah 2. Ali masih boleh menggunakan kata laluan yang sedia ada dan hash yang sedia ada untuk masuk ke dalam sistem kerana sistem akan tahu bahawa hash yang Ali ada sekarang adalah bersifat Bcrypt bukannya Argon yang baharu.

Selalunya kes ini akan berakhir begitu sahaja sehinggalah Ali menukar kata laluannya. Tetapi kita boleh membuat satu pemeriksaan tambahan selepas Ali berjaya masuk ke dalam sistem dengan memeriksa sama ada hash untuk kata laluannya memerlukan hash semula atau tidak dengan membuat kod seperti ini;

if (Hash::needsRehash($user->password)) {
    $user->password = Hash::make($request->password);
    $user->save();
}

Selepas itu, jika diperlukan untuk membuat hash semula, sistem akan menjana hash yang baru untuk kata laluan Ali dan menyimpannya ke dalam pangkalan data. Hash kata laluan Ali yang baru adalah

$argon2i$v=19$m=1024,t=2,p=2$Y0tPY1dGOXhsR3VZSkozaQ$xYEN90AjVjBqp6j27m2YmtfqrOtG6l6Qk6A0NHIxLxs

Aku sepasang kasut

Aku terjaga dari tidur yang panjang. Di sebalik semak yang gelap dan meninggi, di situ aku masih terbaring keseorangan. Dibiarkan sedang air dari langit merintik air dingin membasahi muka dan badanku. Ah hujan rupanya. Bukan aku pinta untuk lahir ke dunia ini sebagai peti sejuk. Yang apabila elok disukai kerana isi badanku yang sejuk. Tetapi apabila rosak, semak menjadi temanku. Apakan daya, sudah nasibku. Derap-derap bunyi tapak kaki sesekali aku dengar apabila orang berjalan-jalan melintasi laluan di sekitar ku. Alangkah bagusnya jika aku adalah sepasang kasut, menjadi sebelah kasut pun sudah mencukupi. Ah biarkan aku tidur lagi.

Aku terjaga sekali lagi aku terdengar bunyi bising bisik-bisik dari suara yang ramai. Aku tidak pasti dimana. Keadaan gelap gelita. Yang pasti ada bunyi lori dan bau sekeliling adalah seperti bau kulit binatang yang telah di proses. Ku raba sekeliling badanku, aku jadi sedikit aneh kerana tiada badan yang besar dan berat tetapi hanya sekeping sahaja badanku kini. Aku kurang pasti apa yang terjadi selepas itu, yang aku ingat hanya beberapa perkara.

Aku terlihat cahaya terang dan kemudian ada beberapa tangan-tangan manusia mahupun bukan manusia yang aku rasa itulah mereka kata robot. Aku dipotong beberapa kali, kepada beberapa bahagian. Sakitnya bukan kepalang tetapi apabila aku menjerit tiada siapa yang mendengarnya. Kemudian ku dijahitkan semula. Dicantum satu persatu bahagian badanku dan setelah aku sedar apa yang sedang berlaku, aku tahu aku bukan lagi peti sejuk yang dahulu tetapi aku kini ialah sepasang kasut kulit berkilat  berwarna hitam pekat dengan gaya Oxford. Kagum aku dengan diriku yang baru kerana menjadi sepasang kasut yang punya citarasa yang tinggi di dalam fesyen.

Tidak lama aku di kedai, aku mendapat tuan yang baharu. Seorang pekerja eksekutif di sebuah pejabat ternama. Dia memakaiku hampir setiap hari kerana ada masanya dia merehatkan aku kerana katanya adalah untuk menjadikan aku tahan lebih lama. Aku suka. Dia menggilapku hampir setiap minggu. Paling tidak dia akan memberus badanku. Aku membantunya untuk berjalan ke banyak tempat. Dari pagi hingga petang, dari satu kawasan ke satu kawasan yang lain. Dari satu pejabat ke pejabat yang lain.

Tetapi semua itu tak lama, selang beberapa tahun dia mula mengabaikan ku. Kadang-kala aku termasuk ke lopak air, kadang-kala debu dan pasir menhinggapi badanku. Tuan ku ini tidak rajin sangat membersihkan aku. Masa beli dahulu dia memang rajin tetapi kini sudah tidak lagi. Lama kelamaan badanku menjadi capuk dan rosak kerana tidak dijaga dengan betul. Apabila semakin rosak dia cuba membaiki ku tetapi tukang kasut yang ditemuinya mengatakan aku sudah tidak boleh dibaiki lagi kerana rosaknya terlalu banyak dan kosnya terlalu tinggi. Tuan ku mendengus kerana dianggapnya kualiti aku tidak bagus walaupun hargaku mahal. Sedih aku mendengar tohmahan tersebut.

Aku dicampakkan ke tong sampah kerana tidak mampu lagi diperbaiki. Selang beberapa hari, pekerja pengumpul sampah mengambil ku dan mencampakkan pula ku ke perut lori sampah yang besar. Tergolek aku ke dalam timbunan sampah tersebut. Aku nampak pintu lori sampah sudah mula menutup secara perlahan. Selamat tinggal dunia. Selamat tinggal semua. Aku menutup mata sambil air mata ku berjurai ke pipi.

Tiba-tiba aku terjaga. Ah, aku bermimpi. Aku kini menjadi peti sejuk yang ditinggalkan semula. Aku terjaga kerana ada seorang yang sedang menaikkan ku ke atas sebuah lori. Di dalam lori tersebut ada beberapa barang rosak yang lain. Kata mereka, lelaki ini orang yang suka memberikan hidup baru kepada barangan rosak seperti aku dan mereka. Maka aku tersenyum, mungkin ada baiknya aku bukan sepasang kasut.

Nota: Imaginasikan diri anda sebagai sebuah peti sejuk. Tulis karangan tentang “Aku Sepasang kasut”. (25 Markah)