chamah/README.md
2017-10-20 23:07:36 +02:00

388 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Chamah
Chamah is a symmetric-key algorythm.
Project is all fresh
### Todo
* Sheduled Key
* Entropy managment
* Crypt Header containing real random seed used by Chamah to cypher data & s-box generation
* Map split definition based on skey
* Map mix definition based on mkey
* Base64 encoding
* Compression
* Masking
* random Noise data addition over split and mix operation
### S-Box generation example
```
----------------------------------------------------------------------------------
|| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f |
----------------------------------------------------------------------------------
00 || d1 | 04 | 02 | 8f | 7a | f4 | 5f | 19 | 89 | c2 | fb | 52 | 6f | 94 | f0 | b1 |
01 || 71 | 03 | e0 | cd | 26 | 7b | c3 | 8b | 13 | 5a | fd | 98 | dc | c1 | 33 | 78 |
02 || 30 | 4c | 09 | 08 | 9e | e6 | 86 | 5b | 41 | d8 | 00 | 9f | 63 | c5 | b4 | 28 |
03 || b2 | 4a | fc | 0f | ef | f5 | 47 | 64 | ce | e5 | 0c | 73 | a8 | 7c | f9 | 9a |
04 || b7 | 46 | 05 | 06 | 87 | cc | 5c | 1a | ae | 2b | 3c | 34 | 65 | d7 | 29 | 1f |
05 || bd | 5e | f8 | 2a | 43 | d9 | 6a | ac | 79 | d6 | 3a | d2 | af | db | 22 | 72 |
06 || a9 | 6e | 21 | 1e | 54 | 61 | be | aa | a2 | ad | 25 | f7 | bb | 84 | e8 | f6 |
07 || 81 | 0e | ff | ee | 44 | ea | 5d | 3d | 97 | 1d | 0a | ed | 3b | d5 | 6b | c6 |
08 || 2e | b9 | 4f | e1 | 10 | 45 | 1c | 8a | 68 | 57 | a0 | 12 | c4 | 18 | 76 | 95 |
09 || 8e | a1 | 11 | 7d | f2 | 58 | 96 | c7 | 80 | e2 | 93 | 90 | 3f | b8 | a3 | 66 |
0a || cf | 91 | 32 | ba | 37 | 62 | 67 | 99 | d3 | 17 | 88 | 51 | 59 | ca | a5 | 83 |
0b || 4d | f1 | 0d | a7 | bc | 16 | 4b | 7f | 75 | 4e | 8d | 70 | ec | 69 | 50 | 60 |
0c || 48 | 31 | 07 | 9d | ab | fe | da | 2c | 38 | d4 | b6 | eb | 82 | de | 9c | 6c |
0d || 42 | b0 | 85 | e9 | 35 | 2f | 53 | a6 | c9 | 39 | c8 | 3e | 24 | e3 | 14 | fa |
0e || 56 | b3 | 49 | 01 | bf | 8c | a4 | 2d | df | 20 | 27 | 36 | c0 | 15 | e7 | 9b |
0f || 7e | b5 | 40 | d0 | 1b | cb | 0b | 55 | 6d | 92 | 74 | f3 | dd | 23 | e4 | 77 |
```
s-box are generated with input generator and several transformation
#### Left rotation
```
d9 => b3
1 1 0 1 1 0 0 1 => 1 0 1 1 0 0 1 1 => ...
```
#### Inverse left rotation
```
[d9]
[1 1 0 1 1 0 0 1]
9b => 37
1 0 0 1 1 0 1 1 => 0 0 1 1 0 1 1 1 => ...
```
#### Reverse left rotation
```
[d9]
[1 1 0 1 1 0 0 1]
26 => 4c
0 0 1 0 0 1 1 0 => 0 1 0 0 1 1 0 0 => ...
```
#### Reverse inverse left rotation
```
[d9]
[1 1 0 1 1 0 0 1]
[26]
[0 0 1 0 0 1 1 0]
64 => c8
0 1 1 0 0 1 0 0 => 1 1 0 0 1 0 0 0 => ...
```
#### Example
input byte : d9
```
0 1 2 3 4 5 6 7 8 9 A B C D E F
0 [1 1 0 1 1 0 0 1] [0 0 1 0 0 1 1 0]
1 [1 0 1 1 0 0 1 1] [0 1 0 0 1 1 0 0]
2 [0 1 1 0 0 1 1 1] [1 0 0 1 1 0 0 0]
3 [1 1 0 0 1 1 1 0] [0 0 1 1 0 0 0 1]
4 [1 0 0 1 1 1 0 1] [0 1 1 0 0 0 1 0]
5 [0 0 1 1 1 0 1 1] [1 1 0 0 0 1 0 0]
6 [0 1 1 1 0 1 1 0] [1 0 0 0 1 0 0 1]
7 [1 1 1 0 1 1 0 0] [0 0 0 1 0 0 1 1]
Left rotation Reverse left rot
Inverse left rot Rev inv left rot
8 [1 0 0 1 1 0 1 1] [0 1 1 0 0 1 0 0]
9 [0 0 1 1 0 1 1 1] [1 1 0 0 1 0 0 0]
A [0 1 1 0 1 1 1 0] [1 0 0 1 0 0 0 1]
B [1 1 0 1 1 1 0 0] [0 0 1 0 0 0 1 1]
C [1 0 1 1 1 0 0 1] [0 1 0 0 0 1 1 0]
D [0 1 1 1 0 0 1 1] [1 0 0 0 1 1 0 0]
E [1 1 1 0 0 1 1 0] [0 0 0 1 1 0 0 1]
F [1 1 0 0 1 1 0 1] [0 0 1 1 0 0 1 0]
```
an additionnal start _vertical_ index give the position, of starting current transformation
here all start index begins to 0
start index are generated pseudo-randomly
### Legend
--- : horizontal char or sequence duplicate
| : vertical char duplicate
#### Input (36+1) string
```
blaz to blaz000000000000aozaozaozaoz
```
#### Input chunk string representation
```
000000 [12:12] blaz to blaz|
---- ----
000001 [12:12] 000000000000
------------
000002 [12:12] aozaozaozaoz|
000003 [01:12] ------------
```
#### Input chunk hexa representation
```
000000 [12:12] 62 6c 61 7a 20 74 6f 20 62 6c 61 7a |
-- -- -- -- -- -- -- --
000001 [12:12] 30 30 30 30 30 30 30 30 30 30 30 30
-- -- -- -- -- -- -- -- -- -- -- --
000002 [12:12] 61 6f 7a 61 6f 7a 61 6f 7a 61 6f 7a |
-----------------------------------
000003 [01:12] 0a
```
#### Output chunk hexa representation
```
000000 [12:12] 30 51 13 ec 76 cc 32 ff 03 95 8f f7
000001 [12:12] ad 38 9a 58 ed 03 36 01 e1 2f 02 ee
000002 [12:12] 71 31 f5 0b 38 82 e6 bb 2e 74 cc 84
000003 [01:12] c0
```
#### Output (37) string
```
0Q<13>v<EFBFBD>2<EFBFBD><03><>8<EFBFBD>X<EFBFBD>6<01>/<02>q1<71>
8<><38><EFBFBD>.t̄
```
### Round definition
* input data is read by chunk
* on each chunk we iterate over input chunk data
* a standard round use s-box related to a key index with input as chunk data index
* extended round repeat operation with other s-box related to other key index with input as previous output
* next round can be standard or extended with input as previous output
#### Standard round
== input byte ======
```
[r]ound : id - [i]nput chunk data : index - chunk [l]ine : index - [k]ey : index - [b]yte : output
```
#### Extended round
```
{standard round} - [k]ey : index - [b]yte : output
```
### Round example
```
== 62 ===============
r : 00 - i : 00 - l : 00 - k : 00 - b : 9c - k : 00 - b : 24
r : 01 - i : 00 - l : 00 - k : 01 - b : dc
r : 02 - i : 00 - l : 00 - k : 02 - b : f4
r : 03 - i : 00 - l : 00 - k : 03 - b : d3
r : 04 - i : 00 - l : 00 - k : 04 - b : 3d
r : 05 - i : 00 - l : 00 - k : 05 - b : 07
r : 06 - i : 00 - l : 00 - k : 06 - b : 9a
r : 07 - i : 00 - l : 00 - k : 07 - b : a8 - k : 07 - b : a4
r : 08 - i : 00 - l : 00 - k : 08 - b : e6
r : 09 - i : 00 - l : 00 - k : 09 - b : 5e - k : 09 - b : 8a
r : 10 - i : 00 - l : 00 - k : 10 - b : c6 - k : 06 - b : 0a
r : 11 - i : 00 - l : 00 - k : 11 - b : 30
all round transformation ([] are extended round) :
62 > [9c > 24] > dc > f4 > d3 > 3d > 07 > 9a > [a8 > a4] > e6 > [5e > 8a] > [c6 > 0a] > 30
```
### Round sequences over chunk data iteration example
expose extended round moving position with related index key
```
== 6c ===============
r : 00 - i : 01 - l : 00 - k : 15 - b : 74 - k : 00 - b : b2
r : 01 - i : 01 - l : 00 - k : 14 - b : 84
r : 02 - i : 01 - l : 00 - k : 13 - b : fe
r : 03 - i : 01 - l : 00 - k : 12 - b : fd
r : 04 - i : 01 - l : 00 - k : 11 - b : e5
r : 05 - i : 01 - l : 00 - k : 10 - b : a1
r : 06 - i : 01 - l : 00 - k : 09 - b : 5c
r : 07 - i : 01 - l : 00 - k : 08 - b : 3e - k : 07 - b : e1
r : 08 - i : 01 - l : 00 - k : 07 - b : 82
r : 09 - i : 01 - l : 00 - k : 06 - b : c1 - k : 09 - b : fd
r : 10 - i : 01 - l : 00 - k : 05 - b : a9 - k : 06 - b : 0d
r : 11 - i : 01 - l : 00 - k : 04 - b : 51
== 61 ===============
r : 00 - i : 02 - l : 00 - k : 00 - b : 38 - k : 00 - b : 44
r : 01 - i : 02 - l : 00 - k : 01 - b : 74
r : 02 - i : 02 - l : 00 - k : 02 - b : 97 - k : 14 - b : 97
r : 03 - i : 02 - l : 00 - k : 03 - b : 33
r : 04 - i : 02 - l : 00 - k : 04 - b : 5e
r : 05 - i : 02 - l : 00 - k : 05 - b : 22
r : 06 - i : 02 - l : 00 - k : 06 - b : 64
r : 07 - i : 02 - l : 00 - k : 07 - b : 66
r : 08 - i : 02 - l : 00 - k : 08 - b : de
r : 09 - i : 02 - l : 00 - k : 09 - b : 9c - k : 09 - b : d5
r : 10 - i : 02 - l : 00 - k : 10 - b : 70
r : 11 - i : 02 - l : 00 - k : 11 - b : 2c - k : 11 - b : 13
== 7a ===============
r : 00 - i : 03 - l : 00 - k : 15 - b : aa - k : 00 - b : b7
r : 01 - i : 03 - l : 00 - k : 14 - b : df
r : 02 - i : 03 - l : 00 - k : 13 - b : 6b - k : 14 - b : e7
r : 03 - i : 03 - l : 00 - k : 12 - b : 7a
r : 04 - i : 03 - l : 00 - k : 11 - b : da
r : 05 - i : 03 - l : 00 - k : 10 - b : 02
r : 06 - i : 03 - l : 00 - k : 09 - b : 69
r : 07 - i : 03 - l : 00 - k : 08 - b : b7
r : 08 - i : 03 - l : 00 - k : 07 - b : 55
r : 09 - i : 03 - l : 00 - k : 06 - b : 4d - k : 09 - b : c2
r : 10 - i : 03 - l : 00 - k : 05 - b : 7a
r : 11 - i : 03 - l : 00 - k : 04 - b : a6 - k : 11 - b : ec
== 20 ===============
r : 00 - i : 04 - l : 00 - k : 00 - b : 7b
r : 01 - i : 04 - l : 00 - k : 01 - b : 15 - k : 01 - b : ed
r : 02 - i : 04 - l : 00 - k : 02 - b : 71 - k : 14 - b : ed
r : 03 - i : 04 - l : 00 - k : 03 - b : f6
r : 04 - i : 04 - l : 00 - k : 04 - b : 53 - k : 12 - b : e1
r : 05 - i : 04 - l : 00 - k : 05 - b : ab
r : 06 - i : 04 - l : 00 - k : 06 - b : 73
r : 07 - i : 04 - l : 00 - k : 07 - b : 3d
r : 08 - i : 04 - l : 00 - k : 08 - b : f4
r : 09 - i : 04 - l : 00 - k : 09 - b : 22
r : 10 - i : 04 - l : 00 - k : 10 - b : 3c
r : 11 - i : 04 - l : 00 - k : 11 - b : 4b - k : 11 - b : 76
== 74 ===============
r : 00 - i : 05 - l : 00 - k : 15 - b : 6c
r : 01 - i : 05 - l : 00 - k : 14 - b : be - k : 01 - b : 66
r : 02 - i : 05 - l : 00 - k : 13 - b : 50 - k : 14 - b : 13
r : 03 - i : 05 - l : 00 - k : 12 - b : b2
r : 04 - i : 05 - l : 00 - k : 11 - b : c6 - k : 12 - b : 78
r : 05 - i : 05 - l : 00 - k : 10 - b : af
r : 06 - i : 05 - l : 00 - k : 09 - b : cc
r : 07 - i : 05 - l : 00 - k : 08 - b : 3a
r : 08 - i : 05 - l : 00 - k : 07 - b : aa
r : 09 - i : 05 - l : 00 - k : 06 - b : bf
r : 10 - i : 05 - l : 00 - k : 05 - b : fb
r : 11 - i : 05 - l : 00 - k : 04 - b : c5 - k : 11 - b : cc
== 6f ===============
r : 00 - i : 06 - l : 00 - k : 00 - b : 64
r : 01 - i : 06 - l : 00 - k : 01 - b : 37 - k : 01 - b : a4
r : 02 - i : 06 - l : 00 - k : 02 - b : 00
r : 03 - i : 06 - l : 00 - k : 03 - b : a7 - k : 03 - b : 83
r : 04 - i : 06 - l : 00 - k : 04 - b : 86 - k : 12 - b : 0b
r : 05 - i : 06 - l : 00 - k : 05 - b : 61
r : 06 - i : 06 - l : 00 - k : 06 - b : c7 - k : 10 - b : ca
r : 07 - i : 06 - l : 00 - k : 07 - b : 5e
r : 08 - i : 06 - l : 00 - k : 08 - b : a9
r : 09 - i : 06 - l : 00 - k : 09 - b : b5
r : 10 - i : 06 - l : 00 - k : 10 - b : 82
r : 11 - i : 06 - l : 00 - k : 11 - b : 32
== 20 ===============
r : 00 - i : 07 - l : 00 - k : 15 - b : 0f
r : 01 - i : 07 - l : 00 - k : 14 - b : 73 - k : 01 - b : 3b
r : 02 - i : 07 - l : 00 - k : 13 - b : d2
r : 03 - i : 07 - l : 00 - k : 12 - b : 15 - k : 03 - b : 59
r : 04 - i : 07 - l : 00 - k : 11 - b : d9 - k : 12 - b : b7
r : 05 - i : 07 - l : 00 - k : 10 - b : 56
r : 06 - i : 07 - l : 00 - k : 09 - b : 95 - k : 10 - b : 06
r : 07 - i : 07 - l : 00 - k : 08 - b : 94
r : 08 - i : 07 - l : 00 - k : 07 - b : f4
r : 09 - i : 07 - l : 00 - k : 06 - b : df
r : 10 - i : 07 - l : 00 - k : 05 - b : 31
r : 11 - i : 07 - l : 00 - k : 04 - b : ff
== 62 ===============
r : 00 - i : 08 - l : 00 - k : 00 - b : 9c
r : 01 - i : 08 - l : 00 - k : 01 - b : ce
r : 02 - i : 08 - l : 00 - k : 02 - b : f6
r : 03 - i : 08 - l : 00 - k : 03 - b : 77 - k : 03 - b : 29
r : 04 - i : 08 - l : 00 - k : 04 - b : 19
r : 05 - i : 08 - l : 00 - k : 05 - b : 27 - k : 05 - b : 8d
r : 06 - i : 08 - l : 00 - k : 06 - b : 07 - k : 10 - b : 94
r : 07 - i : 08 - l : 00 - k : 07 - b : f4
r : 08 - i : 08 - l : 00 - k : 08 - b : c5 - k : 08 - b : 35
r : 09 - i : 08 - l : 00 - k : 09 - b : 7e
r : 10 - i : 08 - l : 00 - k : 10 - b : 9e
r : 11 - i : 08 - l : 00 - k : 11 - b : 03
== 6c ===============
r : 00 - i : 09 - l : 00 - k : 15 - b : 74
r : 01 - i : 09 - l : 00 - k : 14 - b : d3
r : 02 - i : 09 - l : 00 - k : 13 - b : 3c
r : 03 - i : 09 - l : 00 - k : 12 - b : 27 - k : 03 - b : 9d
r : 04 - i : 09 - l : 00 - k : 11 - b : ac
r : 05 - i : 09 - l : 00 - k : 10 - b : 3f - k : 05 - b : 3a
r : 06 - i : 09 - l : 00 - k : 09 - b : bc - k : 10 - b : 68
r : 07 - i : 09 - l : 00 - k : 08 - b : 96
r : 08 - i : 09 - l : 00 - k : 07 - b : a7 - k : 08 - b : 56
r : 09 - i : 09 - l : 00 - k : 06 - b : 0b
r : 10 - i : 09 - l : 00 - k : 05 - b : 61
r : 11 - i : 09 - l : 00 - k : 04 - b : 95
== 61 ===============
r : 00 - i : 10 - l : 00 - k : 00 - b : 38
r : 01 - i : 10 - l : 00 - k : 01 - b : c8
r : 02 - i : 10 - l : 00 - k : 02 - b : 60
r : 03 - i : 10 - l : 00 - k : 03 - b : 76
r : 04 - i : 10 - l : 00 - k : 04 - b : 18
r : 05 - i : 10 - l : 00 - k : 05 - b : 7c - k : 05 - b : 21
r : 06 - i : 10 - l : 00 - k : 06 - b : 82
r : 07 - i : 10 - l : 00 - k : 07 - b : de - k : 07 - b : 0d
r : 08 - i : 10 - l : 00 - k : 08 - b : b8 - k : 08 - b : aa
r : 09 - i : 10 - l : 00 - k : 09 - b : a1
r : 10 - i : 10 - l : 00 - k : 10 - b : e1 - k : 06 - b : 1a
r : 11 - i : 10 - l : 00 - k : 11 - b : 8f
== 7a ===============
r : 00 - i : 11 - l : 00 - k : 15 - b : aa
r : 01 - i : 11 - l : 00 - k : 14 - b : ba
r : 02 - i : 11 - l : 00 - k : 13 - b : 1e
r : 03 - i : 11 - l : 00 - k : 12 - b : 48
r : 04 - i : 11 - l : 00 - k : 11 - b : 44
r : 05 - i : 11 - l : 00 - k : 10 - b : 5f - k : 05 - b : 4b
r : 06 - i : 11 - l : 00 - k : 09 - b : 85
r : 07 - i : 11 - l : 00 - k : 08 - b : 8e - k : 07 - b : 65
r : 08 - i : 11 - l : 00 - k : 07 - b : f5 - k : 08 - b : 7c
r : 09 - i : 11 - l : 00 - k : 06 - b : d7
r : 10 - i : 11 - l : 00 - k : 05 - b : 73 - k : 06 - b : bc
r : 11 - i : 11 - l : 00 - k : 04 - b : f7
== 30 ===============
r : 00 - i : 00 - l : 01 - k : 00 - b : dd - k : 01 - b : fc
r : 01 - i : 00 - l : 01 - k : 01 - b : 32
r : 02 - i : 00 - l : 01 - k : 02 - b : d2
r : 03 - i : 00 - l : 01 - k : 03 - b : 4a
r : 04 - i : 00 - l : 01 - k : 04 - b : 8a
r : 05 - i : 00 - l : 01 - k : 05 - b : c0
r : 06 - i : 00 - l : 01 - k : 06 - b : 11
r : 07 - i : 00 - l : 01 - k : 07 - b : a9 - k : 08 - b : 0e
r : 08 - i : 00 - l : 01 - k : 08 - b : 03
r : 09 - i : 00 - l : 01 - k : 09 - b : 76 - k : 10 - b : e3
r : 10 - i : 00 - l : 01 - k : 10 - b : 48 - k : 07 - b : 1d
r : 11 - i : 00 - l : 01 - k : 11 - b : ad
...
== 0a ===============
r : 00 - i : 00 - l : 03 - k : 00 - b : f3 - k : 03 - b : 84
r : 01 - i : 00 - l : 03 - k : 01 - b : 6d
r : 02 - i : 00 - l : 03 - k : 02 - b : 42
r : 03 - i : 00 - l : 03 - k : 03 - b : 57
r : 04 - i : 00 - l : 03 - k : 04 - b : f1
r : 05 - i : 00 - l : 03 - k : 05 - b : c5
r : 06 - i : 00 - l : 03 - k : 06 - b : 37
r : 07 - i : 00 - l : 03 - k : 07 - b : 57 - k : 10 - b : 86
r : 08 - i : 00 - l : 03 - k : 08 - b : 99
r : 09 - i : 00 - l : 03 - k : 09 - b : 46 - k : 12 - b : aa
r : 10 - i : 00 - l : 03 - k : 10 - b : 8a - k : 09 - b : 50
r : 11 - i : 00 - l : 03 - k : 11 - b : c0
...
```