**COMP128** merupakan implementasi dari algoritme A3 dan A8 yang didefinisikan dalam standar GSM.

A3 digunakan untuk otentikasi Stasiun Bergerak (Mobile Station)ke jaringan. A8 digunakan untuk menghasilkan kunci sesi yang digunakan oleh algoritme A5 untuk mengenkripsi data yang dikirimkan antara stasiun bergerak dan BTS.

Algoritme awalnya bersifat rahasia. Penjelasan parsial bocor pada tahun 1997 dan diselesaikan melalui reverse engineering. Hal ini menyebabkan publikasi sepenuhnya pada tahun 1998.

Pengantar
---------

Untuk rincian tentang cara A3 dan A8 digunakan lihat Authentication Center, dimana Authentication centre (AuC) berisi parameter authentikasi pelanggan untuk mengakses jaringan GSM

A3 dan A8 keduanya mengambil kunci 128 bit (*Ki*) dan 128 bits challenge (*RAND*) sebagai masukan. A3 menghasilkan respon 32 bit (*SRES*) dan A8 menghasilkan 64 bit kunci sesi (*Kc*).

COMP128 menggabungkan fungsi A3 dan A8. COMP128-1 dibangun di sekitar fungsi kompresi dengan dua masukan 128 bit dan satu keluaran 128 bit. Fungsi ini memiliki delapan putaran dan didasarkan pada struktur kupu-kupu dengan lima tahap.

Algoritme COMP128
-----------------

Beberapa algoritme COMP128 yang dirancang:

* COMP128-1 algoritme pertama yang dikenal lemah
* COMP128-2 menggantikan COMP128-1, tapi masih menetapkan 10 bit paling kanan dari Kc ke 0), sengaja melemahkan pengacakan A5
* COMP128-3 sama dengan algoritme COMP128-2, tetapi semua 64-bit dari Kc di generat
* COMP128-4 didasarkan atas algoritme 3GPP (3rd Generation Partnership Project) ("Milenage"), yang menggunakan AES

Deskripsi COMP128-1
-------------------

T0[512], T1[256], T2[128], T3[64] and T4[32] are compression tables.

````
comp128: *RAND*, *Ki* -> *SRES*, *Kc*
{
 x[32]:      array of bytes
 bit[128]:   array of bits
 m, n, y, z: integers

 x[16..31]:= *RAND*
 for i:= 1 to 8
   x[0..15]:= *Ki*
   for j:= 0 to 4
     for k:= 0 to 2j-1
       for l:= 0 to 24-j-1
         m:= l + k * 25-j
         n:= m + 24-j
         y:= (x[m] + 2 * x[n]) mod 29-j
         z:= (2 * x[m] + x[n]) mod 29-j
         x[m]:= Tj[y]
         x[n]:= Tj[z]    
   for j:= 0 to 31
     for k:= 0 to 3
       bit[4 * j + k]:= x[j]3-k
   if i < 8  
     for j:= 0 to 15
       for k:= 0 to 7
         x[j + 16]7-k:= bit[((8 * j + k) * 17) mod 128]
 *SRES*:= bit[0..31]
 *Kc*:= bit[74..127] {\displaystyle \|} 00000000002
}
````

Keamanan
--------

Fungsi hash COMP128-1 dianggap lemah karena tidak cukup diffusion perubahan kecil di masukan.

Serangan praktis telah membuktikan bahwa dapat memulihkan kunci pelanggan dari SIM. Penggantian algoritme sudah sejak dikembangkan.

Selain kunci sesi dihasilkan oleh COMP128 hanya memiliki 54 bit entropi. Hal ini secara signifikan melemahkan A5.

Referensi
---------

1. ↑  Briceno, Marc; Goldberg, Ian; Wagner, David (1998), *Implementation of COMP128*, diarsipkan dari versi asli tanggal 2009-03-18, diakses tanggal 2013-09-14
2. ↑
3. ↑  Brumley, Billy (2004), *A3/A8 & COMP128* (PDF)

Pranala luar
------------

* Briceno, Marc; Goldberg, Ian (1998), *GSM Cloning*
* Handschuh, Helena; Paillier, Pascal (2000), *Reducing the Collision Probability of Alleged Comp128*, CiteSeerX: 10.1.1.141.1033
* Usman, Kurniawan (2009), *Global Sistem For Mobile Communication* (PDF)  line feed character di `|title=` pada posisi 25 (bantuan)[*pranala nonaktif permanen*]
* Ratih, Hardiantina (2006), *GSM Security* (PDF)