241 lines
8.1 KiB
Markdown
241 lines
8.1 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: [ 7528 63893 43548 25423 47744 42591 13947 15495 44997 9610 32248 3295
|
|
37638 6583 51113 60339 43861 22578 25507 20049 10766 50355 36708 37036
|
|
12276 25874 63870 49205 70 53112 40483 39973 24671 4447 24361 43982
|
|
1997 23736 6951 9733 7407 48242 57341 7624 5578 22071 51177 20155
|
|
2441 15688 7417 935 33982 43009]
|
|
- position key: [41987 59995 38795 29405 53271 32296 44523 10502 49338]
|
|
|
|
|
|
---
|
|
|
|
## User Cipher
|
|
- property key: [25869 62495 1734 362 37984 51592 32568 34493 13441 35472 33999 41683
|
|
20426 4369 47735 37538 8392 1425 8176 40966 37766 22326 21576 20608
|
|
6581 21051 52337 10975 19283 32306 52352 6318 26386 36937 16351 38760
|
|
36505 9636 58306 38636 14299 36502 59745 33866 61255 12802 63463 64177
|
|
38614 28129 16937 786 31611 60757]
|
|
- passcode key: [28207 53281 58835 9812 48933 51588 25408 62022 36721 9334]
|
|
- combined position key: [60340 19752 2334 9189 29138 61771 17595 21364 54614]
|
|
- mask key: [43734 31472 30293 34641 24055 5782 14606 48388 2666 19217]
|
|
|
|
### Combined Postion Key
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
user_pos["user position key:\n[20407 42867 40597 20792 41413 36707 59728 31346 5612]"]
|
|
customer_pos["customer position key:\n[41987 59995 38795 29405 53271 32296 44523 10502 49338]"]
|
|
space:2
|
|
xor(("XOR")):2
|
|
user_pos --> xor
|
|
customer_pos --> xor
|
|
space:2
|
|
comb_pos["combined position key\n[60340 19752 2334 9189 29138 61771 17595 21364 54614]"]:2
|
|
xor --> comb_pos
|
|
```
|
|
|
|
## User Keypad
|
|
- keypad:
|
|
- user passcode indices: [37, 38, 40, 10]
|
|
|
|
## nKode Cipher
|
|
|
|
### Passcode Hash
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
cprop["customer_property_key\n[ 7528 63893 43548 25423 47744 42591 13947 15495 44997 9610 32248 3295
|
|
37638 6583 51113 60339 43861 22578 25507 20049 10766 50355 36708 37036
|
|
12276 25874 63870 49205 70 53112 40483 39973 24671 4447 24361 43982
|
|
1997 23736 6951 9733 7407 48242 57341 7624 5578 22071 51177 20155
|
|
2441 15688 7417 935 33982 43009]"]
|
|
uprop["user_property_key\n[25869 62495 1734 362 37984 51592 32568 34493 13441 35472 33999 41683
|
|
20426 4369 47735 37538 8392 1425 8176 40966 37766 22326 21576 20608
|
|
6581 21051 52337 10975 19283 32306 52352 6318 26386 36937 16351 38760
|
|
36505 9636 58306 38636 14299 36502 59745 33866 61255 12802 63463 64177
|
|
38614 28129 16937 786 31611 60757]"]
|
|
space:2
|
|
xor1(("XOR")):2
|
|
cprop --> xor1
|
|
uprop --> xor1
|
|
space:2
|
|
prop["combined_property_key\n[30821 3466 44250 25125 12000 28631 18755 47674 39748 44826 63799 44556
|
|
56524 2214 32222 30993 35741 23971 31827 61015 47496 37765 56108 49196
|
|
13889 14121 13583 60138 19221 45386 21155 33931 1869 33046 24822 15526
|
|
35156 31004 63717 45289 11060 13028 13980 39298 64141 25653 12302 46090
|
|
40799 20649 24272 181 65477 17748]"]
|
|
xor1 --> prop
|
|
pass["user_passcode_indices\n[37, 38, 40, 10]"]
|
|
space:2
|
|
sel(("select\nproperties")):2
|
|
pass --> sel
|
|
prop --> sel
|
|
space:2
|
|
passcode["user passcode properties:\n[31004 63717 11060 63799]"]:2
|
|
sel --> passcode
|
|
space:2
|
|
pad["zero pad to\nmax nkode length: 10"]:2
|
|
passcode -->pad
|
|
space:2
|
|
paddedpasscode["padded passcode:\n[31004 63717 11060 63799 0 0 0 0 0 0]"]
|
|
pad --> paddedpasscode
|
|
passkey["passcode key:\n[28207 53281 58835 9812 48933 51588 25408 62022 36721 9334]"]
|
|
space:2
|
|
xor2(("XOR")):2
|
|
passkey --> xor2
|
|
paddedpasscode --> xor2
|
|
space:2
|
|
cipheredpass["ciphered passcode:\n[ 5939 10436 52967 57187 48933 51588 25408 62022 36721 9334]"]:2
|
|
xor2 --> cipheredpass
|
|
space:2
|
|
hash(("hash")):2
|
|
cipheredpass --> hash
|
|
space:2
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$am68CvhXvNZFJE1qsmLSL.gC5I.cykt7LbisLcuUNkoFZ18vV1DPO"]:2
|
|
hash --> cipheredhashed
|
|
```
|
|
|
|
### Mask Encipher
|
|
```mermaid
|
|
block-beta
|
|
columns 3
|
|
passcode_idx["passcode indices:\n[37, 38, 40, 10]"]
|
|
comb_pos["combined position key:\n[60340 19752 2334 9189 29138 61771 17595 21364 54614]"]
|
|
cust_pos["customer position key:\n[41987 59995 38795 29405 53271 32296 44523 10502 49338]"]
|
|
|
|
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[1, 2, 4, 1]"]
|
|
propidx --> passcode_position_idx
|
|
|
|
space:5
|
|
pad1(("Pad with\nrandom indices"))
|
|
passcode_position_idx --> pad1
|
|
|
|
space:5
|
|
posidx["Padded Passcode Position Indices:\n[1, 2, 4, 1, 4, 6, 4, 8, 4, 2]"]
|
|
pad1 --> posidx
|
|
space:1
|
|
user_pos["user position key:\n[20407 42867 40597 20792 41413 36707 59728 31346 5612]"]
|
|
xor1 --> user_pos
|
|
|
|
space:4
|
|
sel(("select positions"))
|
|
user_pos --> sel
|
|
posidx --> sel
|
|
space:5
|
|
passcode_pos["ordered user passcode positions:\n[42867 40597 41413 42867 41413 59728 41413 5612 41413 40597]"]
|
|
sel --> passcode_pos
|
|
mask_key["mask key\n[43734 31472 30293 34641 24055 5782 14606 48388 2666 19217]"]
|
|
space:4
|
|
xor2(("XOR"))
|
|
mask_key --> xor2
|
|
passcode_pos --> xor2
|
|
space:5
|
|
mask["enciphered mask:\n [ 3493 58469 55184 8226 64562 65478 39115 43240 43951 54660]"]
|
|
xor2 --> mask
|
|
```
|
|
|
|
### Validate nKode
|
|
|
|
```mermaid
|
|
block-beta
|
|
columns 3
|
|
selected_keys["selected keys:\n[4, 0, 4, 2]"]
|
|
login_keypad["login keypad:\nKey 0: [36 28 38 48 49 32 51 34 17]
|
|
Key 1: [ 9 19 2 3 4 41 33 52 8]
|
|
Key 2: [18 10 47 39 31 23 24 16 35]
|
|
Key 3: [27 46 29 21 22 14 6 43 26]
|
|
Key 4: [45 37 11 12 40 5 42 7 53]
|
|
Key 5: [ 0 1 20 30 13 50 15 25 44]
|
|
"]
|
|
space:4
|
|
|
|
selectkeys(("select keys"))
|
|
mask["enciphered mask:\n [ 3493 58469 55184 8226 64562 65478 39115 43240 43951 54660]"]
|
|
mask_key["mask key:\n[43734 31472 30293 34641 24055 5782 14606 48388 2666 19217]"]
|
|
space:2
|
|
|
|
xor1(("XOR"))
|
|
mask --> xor1
|
|
mask_key --> xor1
|
|
selected_keys --> selectkeys
|
|
login_keypad --> selectkeys
|
|
space:3
|
|
|
|
ordered_keys["ordered keys:\n[[45 37 11 12 40 5 42 7 53]
|
|
[36 28 38 48 49 32 51 34 17]
|
|
[45 37 11 12 40 5 42 7 53]
|
|
[18 10 47 39 31 23 24 16 35]]"]
|
|
user_position_key["user position key:\n[20407 42867 40597 20792 41413 36707 59728 31346 5612]"]
|
|
passcode_pos["ordered user passcode positions:\n[42867 40597 41413 42867 41413 59728 41413 5612 41413 40597]"]
|
|
selectkeys --> ordered_keys
|
|
xor1 --> passcode_pos
|
|
space:8
|
|
|
|
get_passcode_idxs(("recover passcode\nposition indices"))
|
|
user_position_key --> get_passcode_idxs
|
|
passcode_pos --> get_passcode_idxs
|
|
space:8
|
|
|
|
passcode_pos_idxs["padded passcode position indices:\n[1, 2, 4, 1, 4, 6, 4, 8, 4, 2]"]
|
|
get_passcode_idxs --> passcode_pos_idxs
|
|
space:3
|
|
|
|
get_presumed_idxs(("recover passcode\nproperty indices"))
|
|
ordered_keys --> get_presumed_idxs
|
|
passcode_pos_idxs --> get_presumed_idxs
|
|
space:5
|
|
|
|
passcode_prop_idxs["presumed passcode property indices:\n[37, 38, 40, 10]"]
|
|
prop["combined_property_key\n[30821 3466 44250 25125 12000 28631 18755 47674 39748 44826 63799 44556
|
|
56524 2214 32222 30993 35741 23971 31827 61015 47496 37765 56108 49196
|
|
13889 14121 13583 60138 19221 45386 21155 33931 1869 33046 24822 15526
|
|
35156 31004 63717 45289 11060 13028 13980 39298 64141 25653 12302 46090
|
|
40799 20649 24272 181 65477 17748]"]
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$am68CvhXvNZFJE1qsmLSL.gC5I.cykt7LbisLcuUNkoFZ18vV1DPO"]
|
|
get_presumed_idxs --> passcode_prop_idxs
|
|
space:3
|
|
|
|
sel(("select\nproperties"))
|
|
passcode_prop_idxs --> sel
|
|
prop --> sel
|
|
space:5
|
|
|
|
passcode_prop["presumed passcode properties:\n[31004 63717 11060 63799]"]
|
|
sel --> passcode_prop
|
|
space:5
|
|
|
|
cipher(("encipher"))
|
|
passcode_prop --> cipher
|
|
space:5
|
|
|
|
cipheredpass["ciphered passcode:\n[ 5939 10436 52967 57187 48933 51588 25408 62022 36721 9334]"]
|
|
cipher --> cipheredpass
|
|
space:7
|
|
|
|
|
|
comp{"compare"}
|
|
cipheredpass --> comp
|
|
cipheredhashed --> comp
|
|
space:5
|
|
|
|
suc(("success"))
|
|
comp --"Equal"--> suc
|
|
|
|
``` |