### Corat-Coret untuk Memahami Algoritma CRYSTALS-Kyber dan Istilah yang Berhubungan dengannya

diupdate 29/09/2023

Ini adalah catatan (not a user friendly note) saya mengenai hal-hal yang berkaitan dengan algoritma CRYSTALS-Kyber, yaitu suatu algoritma post quantum cryptography.

# PRF (PseudoRandom Function)

"A pseudorandom function is a deterministic function of a key and an input that is indistinguishable from a truly random function of the input."

Fungsi pseudorandom ini seperti "random tiruan", sebuah fungsi yang memiliki suatu kunci dan input kemudian menghasilkan output random namun sulit untuk dibedakan dengan "random sejati" jadi seolah-olah fungsi ini dapat menghasilkan output yang "true random".
Jadi random yang sesungguhnya itu bagaimana? Ada kajian matematisnya, namun secara mudah dan singkat dapat dirangkum dalam kalimat berikut

"Following no laws, random numbers lack any predictability, so when added to text they garble it in a way that no one can unscramble without knowing what numbers were added to encrypt them"

# eXtendable-Output Function (XOF)

Dari Wikipedia

"XOF is an extension of the cryptographic hash that allows its output to be arbitrarily long"

dari glossary NIST

"A function on bit strings in which the output can be extended to any desired length"

# Flowchart Algoritma CRYSTALS-Kyber

Kyber mendukung 2 mekanisme :
Public Key Encryption (PKE)
Key Encapsulation Mechanism (KEM)

A key encapsulation method (KEM) is a scheme with public and private keys, where we can use the public key to create a ciphertext (encapsulation) containing a randomly chosen symmetric key. We can decrypt the ciphertext using the private key.

A key encapsulation method (KEM) is a scheme with public and private keys, where we can use the public key to create a ciphertext (encapsulation) containing a randomly chosen symmetric key. We can decrypt the ciphertext using the private key.

https://crypto.stackexchange.com/questions/51044/relation-between-key-exchange-and-public-key-encryption-schemes

## KEM - Key Generation

* operator + is polynomial addition, example :

t0 =  [[7 + 14*x^2 + 16*x^3], [6 + 12*x + 11*x^2 + 10*x^3]]
e =  [[x^2], [-1*x + x^2]]
t1= t0 + e
t1 = [[7 + 15*x^2 + 16*x^3], [6 + 11*x + 12*x^2 + 10*x^3]]