243 lines
8.2 KiB
Markdown
243 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: [29187 8204 6047 64047 53525 11867 18824 35538 45077 33932 37992 15962
|
|
59642 23909 18198 52159 28347 8078 22066 56398 46985 41696 7084 56103
|
|
1625 31453 7418 15303 35465 27310 46695 8365 45388 58929 11384 64368
|
|
30936 44282 62811 22160 20933 21499 61363 9180 47285 5021 18129 20570
|
|
42619 30657 56801 14839 11286 38709]
|
|
- position key: [57791 55443 47428 9481 40757 62312 55581 59207 31500]
|
|
|
|
|
|
---
|
|
|
|
## User Cipher
|
|
- property key: [63039 13937 22392 22556 23851 13063 2277 14453 60483 59297 53238 50783
|
|
40759 12966 14543 64414 12752 61149 16294 38792 40555 32560 54274 26845
|
|
8408 516 5126 11787 51712 48283 7084 25997 13305 51796 59458 333
|
|
50546 46819 29676 41112 7589 39340 7270 40439 32 16909 4097 47405
|
|
901 23033 12446 65486 41796 14649]
|
|
- passcode key: [ 3917 18489 51928 19673 27451 11243 32524 43956 43333 45897]
|
|
- combined position key: [65378 4217 1730 61114 26857 28326 25595 30504 39366]
|
|
- mask key: [28481 57972 43388 58568 3652 19285 25255 14159 35285 18802]
|
|
|
|
### Combined Postion Key
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
user_pos["user position key:\n[ 7901 51434 49030 52147 63452 40398 47846 36975 58058]"]
|
|
customer_pos["customer position key:\n[57791 55443 47428 9481 40757 62312 55581 59207 31500]"]
|
|
space:2
|
|
xor(("XOR")):2
|
|
user_pos --> xor
|
|
customer_pos --> xor
|
|
space:2
|
|
comb_pos["combined position key\n[65378 4217 1730 61114 26857 28326 25595 30504 39366]"]:2
|
|
xor --> comb_pos
|
|
```
|
|
|
|
## User Keypad
|
|
- keypad:
|
|
- user passcode indices: [16, 34, 51, 12]
|
|
|
|
## nKode Cipher
|
|
|
|
### Passcode Hash
|
|
```mermaid
|
|
block-beta
|
|
columns 2
|
|
cprop["customer_property_key\n[29187 8204 6047 64047 53525 11867 18824 35538 45077 33932 37992 15962
|
|
59642 23909 18198 52159 28347 8078 22066 56398 46985 41696 7084 56103
|
|
1625 31453 7418 15303 35465 27310 46695 8365 45388 58929 11384 64368
|
|
30936 44282 62811 22160 20933 21499 61363 9180 47285 5021 18129 20570
|
|
42619 30657 56801 14839 11286 38709]"]
|
|
uprop["user_property_key\n[63039 13937 22392 22556 23851 13063 2277 14453 60483 59297 53238 50783
|
|
40759 12966 14543 64414 12752 61149 16294 38792 40555 32560 54274 26845
|
|
8408 516 5126 11787 51712 48283 7084 25997 13305 51796 59458 333
|
|
50546 46819 29676 41112 7589 39340 7270 40439 32 16909 4097 47405
|
|
901 23033 12446 65486 41796 14649]"]
|
|
space:2
|
|
xor1(("XOR")):2
|
|
cprop --> xor1
|
|
uprop --> xor1
|
|
space:2
|
|
prop["combined_property_key\n[33852 5757 16615 41523 35902 7516 16749 45735 23638 25389 23454 63493
|
|
30669 28611 32729 12321 24427 61779 27028 19398 10722 56784 53166 46074
|
|
9857 30937 2300 5580 16521 54837 44491 17696 33461 11365 50234 64061
|
|
48554 6681 34487 62984 19552 51799 62421 48683 47253 20880 22224 59767
|
|
42494 11832 60799 50745 36690 44556]"]
|
|
xor1 --> prop
|
|
pass["user_passcode_indices\n[16, 34, 51, 12]"]
|
|
space:2
|
|
sel(("select\nproperties")):2
|
|
pass --> sel
|
|
prop --> sel
|
|
space:2
|
|
passcode["user passcode properties:\n[24427 50234 50745 30669]"]:2
|
|
sel --> passcode
|
|
space:2
|
|
pad["zero pad to\nmax nkode length: 10"]:2
|
|
passcode -->pad
|
|
space:2
|
|
paddedpasscode["padded passcode:\n[24427 50234 50745 30669 0 0 0 0 0 0]"]
|
|
pad --> paddedpasscode
|
|
passkey["passcode key:\n[ 3917 18489 51928 19673 27451 11243 32524 43956 43333 45897]"]
|
|
space:2
|
|
xor2(("XOR")):2
|
|
passkey --> xor2
|
|
paddedpasscode --> xor2
|
|
space:2
|
|
cipheredpass["ciphered passcode:\n[20518 35843 3297 15124 27451 11243 32524 43956 43333 45897]"]:2
|
|
xor2 --> cipheredpass
|
|
space:2
|
|
hash(("hash")):2
|
|
cipheredpass --> hash
|
|
space:2
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$wC7VFWUqOhklJsvhVukMWeGtlHhsuLL58TFxVqahBTvMuyBiLInXW"]:2
|
|
hash --> cipheredhashed
|
|
```
|
|
|
|
### Mask Encipher
|
|
```mermaid
|
|
block-beta
|
|
columns 3
|
|
passcode_idx["passcode indices:\n[16, 34, 51, 12]"]
|
|
comb_pos["combined position key:\n[65378 4217 1730 61114 26857 28326 25595 30504 39366]"]
|
|
cust_pos["customer position key:\n[57791 55443 47428 9481 40757 62312 55581 59207 31500]"]
|
|
|
|
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[7, 7, 6, 3]"]
|
|
propidx --> passcode_position_idx
|
|
|
|
space:5
|
|
pad1(("Pad with\nrandom indices"))
|
|
passcode_position_idx --> pad1
|
|
|
|
space:5
|
|
posidx["Padded Passcode Position Indices:\n[7, 7, 6, 3, 2, 8, 6, 1, 1, 4]"]
|
|
pad1 --> posidx
|
|
space:1
|
|
user_pos["user position key:\n[ 7901 51434 49030 52147 63452 40398 47846 36975 58058]"]
|
|
xor1 --> user_pos
|
|
|
|
space:4
|
|
sel(("select positions"))
|
|
user_pos --> sel
|
|
posidx --> sel
|
|
space:5
|
|
passcode_pos["ordered user passcode positions:\n[36975 36975 47846 52147 49030 58058 47846 51434 51434 63452]"]
|
|
sel --> passcode_pos
|
|
mask_key["mask key\n[28481 57972 43388 58568 3652 19285 25255 14159 35285 18802]"]
|
|
space:4
|
|
xor2(("XOR"))
|
|
mask_key --> xor2
|
|
passcode_pos --> xor2
|
|
space:5
|
|
mask["enciphered mask:\n [65326 29211 5018 12155 45506 43423 55361 65445 16703 48814]"]
|
|
xor2 --> mask
|
|
```
|
|
|
|
### Validate nKode
|
|
|
|
```mermaid
|
|
block-beta
|
|
columns 3
|
|
selected_keys["selected keys:\n[3, 0, 1, 1]"]
|
|
login_keypad["login keypad:\nKey 0: [27 19 20 48 40 32 6 34 35]
|
|
Key 1: [ 9 37 29 12 13 23 51 7 17]
|
|
Key 2: [18 46 2 21 31 41 42 43 26]
|
|
Key 3: [36 28 38 39 22 50 33 16 44]
|
|
Key 4: [ 0 10 11 3 49 14 24 25 8]
|
|
Key 5: [45 1 47 30 4 5 15 52 53]
|
|
"]
|
|
space:4
|
|
|
|
selectkeys(("select keys"))
|
|
mask["enciphered mask:\n [65326 29211 5018 12155 45506 43423 55361 65445 16703 48814]"]
|
|
mask_key["mask key:\n[28481 57972 43388 58568 3652 19285 25255 14159 35285 18802]"]
|
|
space:2
|
|
|
|
xor1(("XOR"))
|
|
mask --> xor1
|
|
mask_key --> xor1
|
|
selected_keys --> selectkeys
|
|
login_keypad --> selectkeys
|
|
space:3
|
|
|
|
ordered_keys["ordered keys:\n[[36 28 38 39 22 50 33 16 44]
|
|
[27 19 20 48 40 32 6 34 35]
|
|
[ 9 37 29 12 13 23 51 7 17]
|
|
[ 9 37 29 12 13 23 51 7 17]]"]
|
|
user_position_key["user position key:\n[ 7901 51434 49030 52147 63452 40398 47846 36975 58058]"]
|
|
passcode_pos["ordered user passcode positions:\n[36975 36975 47846 52147 49030 58058 47846 51434 51434 63452]"]
|
|
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[7, 7, 6, 3, 2, 8, 6, 1, 1, 4]"]
|
|
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[16, 34, 51, 12]"]
|
|
prop["combined_property_key\n[33852 5757 16615 41523 35902 7516 16749 45735 23638 25389 23454 63493
|
|
30669 28611 32729 12321 24427 61779 27028 19398 10722 56784 53166 46074
|
|
9857 30937 2300 5580 16521 54837 44491 17696 33461 11365 50234 64061
|
|
48554 6681 34487 62984 19552 51799 62421 48683 47253 20880 22224 59767
|
|
42494 11832 60799 50745 36690 44556]"]
|
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$wC7VFWUqOhklJsvhVukMWeGtlHhsuLL58TFxVqahBTvMuyBiLInXW"]
|
|
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[24427 50234 50745 30669]"]
|
|
sel --> passcode_prop
|
|
space:5
|
|
|
|
cipher(("encipher"))
|
|
passcode_prop --> cipher
|
|
space:5
|
|
|
|
cipheredpass["ciphered passcode:\n[20518 35843 3297 15124 27451 11243 32524 43956 43333 45897]"]
|
|
cipher --> cipheredpass
|
|
space:7
|
|
|
|
|
|
comp{"compare"}
|
|
cipheredpass --> comp
|
|
cipheredhashed --> comp
|
|
space:7
|
|
|
|
suc(("success"))
|
|
fail(("fail"))
|
|
comp --"Equal"--> suc
|
|
comp --"Not Equal"--> fail
|
|
|
|
``` |