|
1 | 1 | # HIGHT
|
2 | 2 | ### Introduction
|
3 | 3 |
|
4 |
| -HIGHT is a lightweight block cipher that accepts a 64-bit plaintext and 128-bit master key. Through this Python3 implementation, we attempt to shed light on the complexities of this cipher (in ECB mode). Original paper with pseudocode and detailed explanation of the cipher can be found <a href = "https://iacr.org/archive/ches2006/04/04.pdf">here</a>. |
| 4 | +HIGHT is a lightweight block cipher that accepts a 64-bit plaintext and 128-bit master key. Through this Python3 implementation, we attempt to shed light on the complexities of this cipher (in ECB and CBC mode). Original paper with pseudocode and detailed explanation of the cipher can be found <a href = "https://iacr.org/archive/ches2006/04/04.pdf">here</a>. This work is done jointly with <a href = https://github.com/ph1nx>ph1nx</a>. |
5 | 5 |
|
6 | 6 | ### How to use
|
7 | 7 |
|
8 |
| -To encrypt and decrypt, use functions ```hight_encryption(P, MK)``` and ```hight_decryption(C, MK)``` respectively. Do import all functions found in <i>hight.py</i> to ensure that cipher is working well. |
| 8 | +For simple encryption and decryption of 64-bit plaintext, use naive functions ```hight_encryption(P, MK)``` and ```hight_decryption(C, MK)``` respectively. All functions in *hight.py* are implemented as what the original paper details. |
9 | 9 |
|
10 |
| -You would need to edit the values for the master key (MK) and plaintext (P) in the code. Here are some example values for MK, P and ciphertext (C): |
| 10 | +You would need to edit the values for the master key (MK) and plaintext (P) in the code. Here are some example values for MK, P and ciphertext (C) for ECB mode: |
11 | 11 |
|
12 | 12 | ```python
|
13 | 13 | MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89]
|
@@ -99,6 +99,64 @@ P = [0x32, 0x22, 0xF4, 0xCC, 0xCF, 0xD3, 0x90, 0x2D]
|
99 | 99 | expected_C = [0xBB, 0x80, 0xF5, 0x0B, 0x35, 0x11, 0x5B, 0xA8]
|
100 | 100 | ```
|
101 | 101 |
|
| 102 | +You would need to also edit the initialization vector (IV) for CBC mode. Here are some example values for MK, IV, P, C for CBC mode: |
| 103 | + |
| 104 | +```python |
| 105 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 106 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 107 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] |
| 108 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28] |
| 109 | +``` |
| 110 | + |
| 111 | +```python |
| 112 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 113 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 114 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F] |
| 115 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86] |
| 116 | +``` |
| 117 | + |
| 118 | +```python |
| 119 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 120 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 121 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] |
| 122 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47] |
| 123 | +``` |
| 124 | + |
| 125 | +```python |
| 126 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 127 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 128 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F] |
| 129 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47, 0x63, 0x4A, 0x00, 0x01, 0x2F, 0xA0, 0xE9, 0xF0] |
| 130 | +``` |
| 131 | + |
| 132 | +```python |
| 133 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 134 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 135 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] |
| 136 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47, 0x63, 0x4A, 0x00, 0x01, 0x2F, 0xA0, 0xE9, 0xF0, 0x44, 0x9D, 0xE2, 0xBC, 0xC1, 0x68, 0x51, 0x6C] |
| 137 | +``` |
| 138 | + |
| 139 | +```python |
| 140 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 141 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 142 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F] |
| 143 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47, 0x63, 0x4A, 0x00, 0x01, 0x2F, 0xA0, 0xE9, 0xF0, 0x44, 0x9D, 0xE2, 0xBC, 0xC1, 0x68, 0x51, 0x6C, 0x0E, 0x27, 0x45, 0xAC, 0x37, 0xC1, 0xA6, 0x74] |
| 144 | +``` |
| 145 | + |
| 146 | +```python |
| 147 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 148 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 149 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07] |
| 150 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47, 0x63, 0x4A, 0x00, 0x01, 0x2F, 0xA0, 0xE9, 0xF0, 0x44, 0x9D, 0xE2, 0xBC, 0xC1, 0x68, 0x51, 0x6C, 0x0E, 0x27, 0x45, 0xAC, 0x37, 0xC1, 0xA6, 0x74, 0x3A, 0x1E, 0xA5, 0x1E, 0xB4, 0x07, 0xD1, 0x4E] |
| 151 | +``` |
| 152 | + |
| 153 | +```python |
| 154 | +MK = [0x88, 0xE3, 0x4F, 0x8F, 0x08, 0x17, 0x79, 0xF1, 0xE9, 0xF3, 0x94, 0x37, 0x0A, 0xD4, 0x05, 0x89] |
| 155 | +IV = [0x26, 0x8D, 0x66, 0xA7, 0x35, 0xA8, 0x1A, 0x81] |
| 156 | +P = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F] |
| 157 | +expected_C = [0xCE, 0x15, 0x95, 0x08, 0x5A, 0x18, 0x8C, 0x28, 0xC1, 0x8D, 0x77, 0x08, 0xD9, 0xC1, 0x25, 0x86, 0x4B, 0x3D, 0xAF, 0x2B, 0xF2, 0x0D, 0x52, 0x47, 0x63, 0x4A, 0x00, 0x01, 0x2F, 0xA0, 0xE9, 0xF0, 0x44, 0x9D, 0xE2, 0xBC, 0xC1, 0x68, 0x51, 0x6C, 0x0E, 0x27, 0x45, 0xAC, 0x37, 0xC1, 0xA6, 0x74, 0x3A, 0x1E, 0xA5, 0x1E, 0xB4, 0x07, 0xD1, 0x4E, 0xC8, 0xC4, 0xB4, 0x35, 0xCA, 0x05, 0xCC, 0x62] |
| 158 | +``` |
| 159 | + |
102 | 160 | ### Citations
|
103 | 161 |
|
104 | 162 | ```latex
|
|
0 commit comments