244 lines
8.2 KiB
Markdown
244 lines
8.2 KiB
Markdown
# Encipher and Decipher nKode
|
|
|
|
## Customer Policy
|
|
- max nkode length: 10
|
|
- number of keys: 6
|
|
- properties per key: 9
|
|
- total number of properties: 54
|
|
|
|
## Customer Cipher
|
|
- property key: [42782 22411 58796 11465 49503 56275 38775 38081 7026 16254 14654 36893
|
|
55835 42117 397 53181 30070 49716 9591 26367 43862 44491 15032 6140
|
|
27166 25935 32851 1343 59160 16484 19970 19858 51729 7378 38465 28158
|
|
54598 17069 55468 61288 4228 11257 1486 8676 38279 55278 49181 18796
|
|
24775 6931 20611 57138 59596 36232]
|
|
- position key: [12647 30491 17139 56844 38964 47773 48376 30998 47349]
|
|
|
|
|
|
---
|
|
|
|
## User Cipher
|
|
- property key: [33847 39397 2529 4886 18590 30214 36385 48387 45829 57638 20358 47401
|
|
15283 40354 57184 4978 23666 27711 53811 25217 41251 28914 39980 49243
|
|
50901 59505 64895 1640 29549 35643 5917 44770 1327 40377 63154 42643
|
|
27727 34100 38270 40653 59421 61433 33944 52893 5800 59979 60549 28886
|
|
65479 26388 12482 30070 62886 928]
|
|
- passcode key: [39941 46272 6788 28608 6629 37858 57195 10700 63193 44873]
|
|
- combined position key: [17324 5420 26420 62365 37521 21226 5241 59891 59082]
|
|
- mask key: [59295 36535 38305 40214 13117 40275 7336 42576 57021 2814]
|
|
|
|
### Combined Postion Key
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
user_pos["user position key:\n[29387 25143 9671 11665 2725 59511 43137 37093 24127]"]
|
|
customer_pos["customer position key:\n[12647 30491 17139 56844 38964 47773 48376 30998 47349]"]
|
|
space:2
|
|
xor(("XOR")):2
|
|
user_pos --> xor
|
|
customer_pos --> xor
|
|
space:2
|
|
comb_pos["combined position key\n[17324 5420 26420 62365 37521 21226 5241 59891 59082]"]:2
|
|
xor --> comb_pos
|
|
```
|
|
|
|
## User Keypad
|
|
- keypad:
|
|
- user passcode indices: [8, 47, 15, 26]
|
|
|
|
## nKode Cipher
|
|
|
|
### Passcode Hash
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
cprop["customer_property_key\n[42782 22411 58796 11465 49503 56275 38775 38081 7026 16254 14654 36893
|
|
55835 42117 397 53181 30070 49716 9591 26367 43862 44491 15032 6140
|
|
27166 25935 32851 1343 59160 16484 19970 19858 51729 7378 38465 28158
|
|
54598 17069 55468 61288 4228 11257 1486 8676 38279 55278 49181 18796
|
|
24775 6931 20611 57138 59596 36232]"]
|
|
uprop["user_property_key\n[33847 39397 2529 4886 18590 30214 36385 48387 45829 57638 20358 47401
|
|
15283 40354 57184 4978 23666 27711 53811 25217 41251 28914 39980 49243
|
|
50901 59505 64895 1640 29549 35643 5917 44770 1327 40377 63154 42643
|
|
27727 34100 38270 40653 59421 61433 33944 52893 5800 59979 60549 28886
|
|
65479 26388 12482 30070 62886 928]"]
|
|
space:2
|
|
xor1(("XOR")):2
|
|
cprop --> xor1
|
|
uprop --> xor1
|
|
space:2
|
|
prop["combined_property_key\n[ 9001 52846 60493 16351 35265 44501 6486 10690 43127 56920 30392 10548
|
|
57768 14631 57069 56527 10500 44555 63300 1150 2677 56633 42644 55207
|
|
44235 36158 32044 855 38005 52063 22815 58224 53054 33131 24819 52077
|
|
47369 51097 19922 29093 63641 50176 33110 61305 33583 15781 11416 14778
|
|
40704 31751 24641 43588 7530 36392]"]
|
|
xor1 --> prop
|
|
pass["user_passcode_indices\n[8, 47, 15, 26]"]
|
|
space:2
|
|
sel(("select\nproperties")):2
|
|
pass --> sel
|
|
prop --> sel
|
|
space:2
|
|
passcode["user passcode properties:\n[43127 14778 56527 32044]"]:2
|
|
sel --> passcode
|
|
space:2
|
|
pad["zero pad to\nmax nkode length: 10"]:2
|
|
passcode -->pad
|
|
space:2
|
|
paddedpasscode["padded passcode:\n[43127 14778 56527 32044 0 0 0 0 0 0]"]
|
|
pad --> paddedpasscode
|
|
passkey["passcode key:\n[39941 46272 6788 28608 6629 37858 57195 10700 63193 44873]"]
|
|
space:2
|
|
xor2(("XOR")):2
|
|
passkey --> xor2
|
|
paddedpasscode --> xor2
|
|
space:2
|
|
cipheredpass["ciphered passcode:\n[13426 36218 50763 4844 6629 37858 57195 10700 63193 44873]"]:2
|
|
xor2 --> cipheredpass
|
|
space:2
|
|
hash(("hash")):2
|
|
cipheredpass --> hash
|
|
space:2
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$n5xAQRuWhK3MiLsQHYiRu.p2Mam48sH7W/L7BojTBkyoQuUGa6/sO"]:2
|
|
hash --> cipheredhashed
|
|
```
|
|
|
|
### Mask Encipher
|
|
```mermaid
|
|
block-beta
|
|
columns 3
|
|
passcode_idx["passcode indices:\n[8, 47, 15, 26]"]
|
|
comb_pos["combined position key:\n[17324 5420 26420 62365 37521 21226 5241 59891 59082]"]
|
|
cust_pos["customer position key:\n[12647 30491 17139 56844 38964 47773 48376 30998 47349]"]
|
|
|
|
space:3
|
|
propidx(["Get Position Idx:\nmap each to element mod props_per_key"])
|
|
passcode_idx-->propidx
|
|
space:1
|
|
xor1(("XOR"))
|
|
comb_pos --> xor1
|
|
cust_pos --> xor1
|
|
|
|
space:3
|
|
passcode_position_idx["passcode poition indices:\n[8, 2, 6, 8]"]
|
|
propidx --> passcode_position_idx
|
|
|
|
space:5
|
|
pad1(("Pad with\nrandom indices"))
|
|
passcode_position_idx --> pad1
|
|
|
|
space:5
|
|
posidx["Padded Passcode Position Indices:\n[8, 2, 6, 8, 8, 3, 8, 6, 3, 7]"]
|
|
pad1 --> posidx
|
|
space:1
|
|
user_pos["user position key:\n[29387 25143 9671 11665 2725 59511 43137 37093 24127]"]
|
|
xor1 --> user_pos
|
|
|
|
space:4
|
|
sel(("select positions"))
|
|
user_pos --> sel
|
|
posidx --> sel
|
|
space:5
|
|
passcode_pos["ordered user passcode positions:\n[24127 9671 43137 24127 24127 11665 24127 43137 11665 37093]"]
|
|
sel --> passcode_pos
|
|
mask_key["mask key\n[59295 36535 38305 40214 13117 40275 7336 42576 57021 2814]"]
|
|
space:4
|
|
xor2(("XOR"))
|
|
mask_key --> xor2
|
|
passcode_pos --> xor2
|
|
space:5
|
|
mask["enciphered mask:\n [47520 43888 15648 49961 27906 45250 17047 3793 62252 39451]"]
|
|
xor2 --> mask
|
|
```
|
|
|
|
### Validate nKode
|
|
|
|
```mermaid
|
|
block-beta
|
|
columns 4
|
|
selected_keys["selected keys:\n[3, 2, 2, 0]"]
|
|
login_keypad["login keypad:\nKey 0: [ 9 19 38 39 31 5 24 25 26]
|
|
Key 1: [18 1 20 12 13 50 6 34 53]
|
|
Key 2: [36 37 47 21 40 41 15 43 17]
|
|
Key 3: [ 0 10 2 3 4 23 42 7 8]
|
|
Key 4: [45 46 11 30 22 32 51 16 35]
|
|
Key 5: [27 28 29 48 49 14 33 52 44]
|
|
"]
|
|
mask["enciphered mask:\n [47520 43888 15648 49961 27906 45250 17047 3793 62252 39451]"]
|
|
mask_key["mask key:\n[59295 36535 38305 40214 13117 40275 7336 42576 57021 2814]"]
|
|
space:4
|
|
|
|
selectkeys(("select keys"))
|
|
space:2
|
|
xor1(("XOR"))
|
|
mask --> xor1
|
|
mask_key --> xor1
|
|
selected_keys --> selectkeys
|
|
login_keypad --> selectkeys
|
|
space:4
|
|
|
|
ordered_keys["ordered keys:\n[[ 0 10 2 3 4 23 42 7 8]
|
|
[36 37 47 21 40 41 15 43 17]
|
|
[36 37 47 21 40 41 15 43 17]
|
|
[ 9 19 38 39 31 5 24 25 26]]"]
|
|
space:1
|
|
user_position_key["user position key:\n[29387 25143 9671 11665 2725 59511 43137 37093 24127]"]
|
|
passcode_pos["ordered user passcode positions:\n[24127 9671 43137 24127 24127 11665 24127 43137 11665 37093]"]
|
|
selectkeys --> ordered_keys
|
|
xor1 --> passcode_pos
|
|
space:7
|
|
|
|
get_passcode_idxs(("recover passcode\nposition indices"))
|
|
user_position_key --> get_passcode_idxs
|
|
passcode_pos --> get_passcode_idxs
|
|
space:7
|
|
|
|
passcode_pos_idxs["padded passcode position indices:\n[8, 2, 6, 8, 8, 3, 8, 6, 3, 7]"]
|
|
get_passcode_idxs --> passcode_pos_idxs
|
|
space:4
|
|
|
|
get_presumed_idxs(("recover passcode\nproperty indices"))
|
|
ordered_keys --> get_presumed_idxs
|
|
passcode_pos_idxs --> get_presumed_idxs
|
|
space:7
|
|
|
|
passcode_prop_idxs["presumed passcode property indices:\n[8, 47, 15, 26]"]
|
|
space:1
|
|
prop["combined_property_key\n[ 9001 52846 60493 16351 35265 44501 6486 10690 43127 56920 30392 10548
|
|
57768 14631 57069 56527 10500 44555 63300 1150 2677 56633 42644 55207
|
|
44235 36158 32044 855 38005 52063 22815 58224 53054 33131 24819 52077
|
|
47369 51097 19922 29093 63641 50176 33110 61305 33583 15781 11416 14778
|
|
40704 31751 24641 43588 7530 36392]"]
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$n5xAQRuWhK3MiLsQHYiRu.p2Mam48sH7W/L7BojTBkyoQuUGa6/sO"]
|
|
get_presumed_idxs --> passcode_prop_idxs
|
|
space:5
|
|
|
|
sel(("select\nproperties"))
|
|
passcode_prop_idxs --> sel
|
|
prop --> sel
|
|
space:7
|
|
|
|
passcode_prop["presumed passcode properties:\n[43127 14778 56527 32044]"]
|
|
sel --> passcode_prop
|
|
space:7
|
|
|
|
cipher(("encipher"))
|
|
passcode_prop --> cipher
|
|
space:7
|
|
|
|
cipheredpass["ciphered passcode:\n[13426 36218 50763 4844 6629 37858 57195 10700 63193 44873]"]
|
|
cipher --> cipheredpass
|
|
space:8
|
|
|
|
|
|
comp(["compare"])
|
|
cipheredpass --> comp
|
|
cipheredhashed --> comp
|
|
space:7
|
|
|
|
suc(("valid"))
|
|
fail(("invalid"))
|
|
comp --> suc
|
|
comp --> fail
|
|
|
|
``` |