add renew
This commit is contained in:
@@ -1,241 +0,0 @@
|
|||||||
# 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
|
|
||||||
|
|
||||||
```
|
|
||||||
330
docs/encipher_decipher_renew_nkode.md
Normal file
330
docs/encipher_decipher_renew_nkode.md
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
# 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: [40493 16536 22567 8632 16931 48077 38465 62133 61510 60074 30483 15029
|
||||||
|
32328 35555 12264 4839 56666 52299 23010 54024 11530 38809 33384 9334
|
||||||
|
53340 25808 36388 7068 48724 2963 19292 41164 31037 24848 7109 29039
|
||||||
|
26458 18532 7462 19458 51071 45191 60228 22739 41943 36765 29356 35589
|
||||||
|
3387 28997 31698 23822 30837 4299]
|
||||||
|
- position key: [ 8625 16938 65018 7492 24125 667 1225 54737 47670]
|
||||||
|
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## User Cipher
|
||||||
|
- property key: [57486 43228 16207 60359 59029 6255 7588 52492 24710 2551 40990 56898
|
||||||
|
56863 1051 48892 2945 40292 31660 45216 53538 40537 15451 52595 37467
|
||||||
|
3706 19342 38794 33132 21407 3639 12679 9190 10068 50771 64668 35246
|
||||||
|
60714 28831 4623 8674 56989 23715 57671 23914 51409 36438 10577 34976
|
||||||
|
29440 9581 47915 29410 39979 5656]
|
||||||
|
- passcode key: [21257 32848 55275 58059 52662 31196 41361 14925 10153 11854]
|
||||||
|
- combined position key: [34963 12677 35658 5478 60936 17345 54640 40685 50309]
|
||||||
|
- mask key: [23832 11427 59440 48739 10483 30872 4800 48753 55621 53879]
|
||||||
|
|
||||||
|
### Combined Postion Key
|
||||||
|
```mermaid
|
||||||
|
block-beta
|
||||||
|
columns 2
|
||||||
|
user_pos["user position key:\n[58068 33848 20979 58547 24202 53969 27574 25558 64861]"]
|
||||||
|
customer_pos["customer position key:\n[ 8625 16938 65018 7492 24125 667 1225 54737 47670]"]
|
||||||
|
space:2
|
||||||
|
xor(("XOR")):2
|
||||||
|
user_pos --> xor
|
||||||
|
customer_pos --> xor
|
||||||
|
space:2
|
||||||
|
comb_pos["combined position key\n[34963 12677 35658 5478 60936 17345 54640 40685 50309]"]:2
|
||||||
|
xor --> comb_pos
|
||||||
|
```
|
||||||
|
|
||||||
|
## User Keypad
|
||||||
|
- keypad:
|
||||||
|
- user passcode indices: [22, 34, 45, 43]
|
||||||
|
|
||||||
|
## nKode Cipher
|
||||||
|
|
||||||
|
### Passcode Hash
|
||||||
|
```mermaid
|
||||||
|
block-beta
|
||||||
|
columns 2
|
||||||
|
cprop["customer_property_key\n[40493 16536 22567 8632 16931 48077 38465 62133 61510 60074 30483 15029
|
||||||
|
32328 35555 12264 4839 56666 52299 23010 54024 11530 38809 33384 9334
|
||||||
|
53340 25808 36388 7068 48724 2963 19292 41164 31037 24848 7109 29039
|
||||||
|
26458 18532 7462 19458 51071 45191 60228 22739 41943 36765 29356 35589
|
||||||
|
3387 28997 31698 23822 30837 4299]"]
|
||||||
|
uprop["user_property_key\n[57486 43228 16207 60359 59029 6255 7588 52492 24710 2551 40990 56898
|
||||||
|
56863 1051 48892 2945 40292 31660 45216 53538 40537 15451 52595 37467
|
||||||
|
3706 19342 38794 33132 21407 3639 12679 9190 10068 50771 64668 35246
|
||||||
|
60714 28831 4623 8674 56989 23715 57671 23914 51409 36438 10577 34976
|
||||||
|
29440 9581 47915 29410 39979 5656]"]
|
||||||
|
space:2
|
||||||
|
xor1(("XOR")):2
|
||||||
|
cprop --> xor1
|
||||||
|
uprop --> xor1
|
||||||
|
space:2
|
||||||
|
prop["combined_property_key\n[62032 50130 36776 54558 8506 61182 6770 6684 21325 58903 51619 53457
|
||||||
|
24017 10096 25891 36737 43828 60364 23965 63299 43548 43762 63289 61210
|
||||||
|
16490 21923 14215 6365 4383 48550 62830 53206 5237 2426 49278 33751
|
||||||
|
21542 2104 49342 42984 62776 19754 59167 25211 60 58461 118 9841
|
||||||
|
52387 3482 40915 54740 30225 8961]"]
|
||||||
|
xor1 --> prop
|
||||||
|
pass["user_passcode_indices\n[22, 34, 45, 43]"]
|
||||||
|
space:2
|
||||||
|
sel(("select\nproperties")):2
|
||||||
|
pass --> sel
|
||||||
|
prop --> sel
|
||||||
|
space:2
|
||||||
|
passcode["user passcode properties:\n[63289 49278 58461 25211]"]:2
|
||||||
|
sel --> passcode
|
||||||
|
space:2
|
||||||
|
pad["zero pad to\nmax nkode length: 10"]:2
|
||||||
|
passcode -->pad
|
||||||
|
space:2
|
||||||
|
paddedpasscode["padded passcode:\n[63289 49278 58461 25211 0 0 0 0 0 0]"]
|
||||||
|
pad --> paddedpasscode
|
||||||
|
passkey["passcode key:\n[21257 32848 55275 58059 52662 31196 41361 14925 10153 11854]"]
|
||||||
|
space:2
|
||||||
|
xor2(("XOR")):2
|
||||||
|
passkey --> xor2
|
||||||
|
paddedpasscode --> xor2
|
||||||
|
space:2
|
||||||
|
cipheredpass["ciphered passcode:\n[42032 16430 13238 32944 52662 31196 41361 14925 10153 11854]"]:2
|
||||||
|
xor2 --> cipheredpass
|
||||||
|
space:2
|
||||||
|
hash(("hash")):2
|
||||||
|
cipheredpass --> hash
|
||||||
|
space:2
|
||||||
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$c62ezzyLW3QzUMjYUPSioexdMtSuJKzSM4KLkdKhWIiuNzcxOfT8m"]:2
|
||||||
|
hash --> cipheredhashed
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mask Encipher
|
||||||
|
```mermaid
|
||||||
|
block-beta
|
||||||
|
columns 3
|
||||||
|
passcode_idx["passcode indices:\n[22, 34, 45, 43]"]
|
||||||
|
comb_pos["combined position key:\n[34963 12677 35658 5478 60936 17345 54640 40685 50309]"]
|
||||||
|
cust_pos["customer position key:\n[ 8625 16938 65018 7492 24125 667 1225 54737 47670]"]
|
||||||
|
|
||||||
|
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[4, 7, 0, 7]"]
|
||||||
|
propidx --> passcode_position_idx
|
||||||
|
|
||||||
|
space:5
|
||||||
|
pad1(("Pad with\nrandom indices"))
|
||||||
|
passcode_position_idx --> pad1
|
||||||
|
|
||||||
|
space:5
|
||||||
|
posidx["Padded Passcode Position Indices:\n[4, 7, 0, 7, 2, 2, 0, 3, 7, 8]"]
|
||||||
|
pad1 --> posidx
|
||||||
|
space:1
|
||||||
|
user_pos["user position key:\n[58068 33848 20979 58547 24202 53969 27574 25558 64861]"]
|
||||||
|
xor1 --> user_pos
|
||||||
|
|
||||||
|
space:4
|
||||||
|
sel(("select positions"))
|
||||||
|
user_pos --> sel
|
||||||
|
posidx --> sel
|
||||||
|
space:5
|
||||||
|
passcode_pos["ordered user passcode positions:\n[24202 25558 58068 25558 20979 20979 58068 58547 25558 64861]"]
|
||||||
|
sel --> passcode_pos
|
||||||
|
mask_key["mask key\n[23832 11427 59440 48739 10483 30872 4800 48753 55621 53879]"]
|
||||||
|
space:4
|
||||||
|
xor2(("XOR"))
|
||||||
|
mask_key --> xor2
|
||||||
|
passcode_pos --> xor2
|
||||||
|
space:5
|
||||||
|
mask["enciphered mask:\n [ 914 20341 2788 56757 30976 10603 61460 23234 47763 12074]"]
|
||||||
|
xor2 --> mask
|
||||||
|
```
|
||||||
|
|
||||||
|
### Validate nKode
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
block-beta
|
||||||
|
columns 3
|
||||||
|
selected_keys["selected keys:\n[5, 3, 2, 2]"]
|
||||||
|
login_keypad["login keypad:\nKey 0: [18 19 11 30 40 41 24 52 26]
|
||||||
|
Key 1: [36 1 47 12 49 32 42 25 35]
|
||||||
|
Key 2: [45 46 29 39 13 50 33 43 17]
|
||||||
|
Key 3: [27 37 2 3 31 5 6 34 8]
|
||||||
|
Key 4: [ 9 10 20 21 4 23 15 7 53]
|
||||||
|
Key 5: [ 0 28 38 48 22 14 51 16 44]
|
||||||
|
"]
|
||||||
|
space:4
|
||||||
|
|
||||||
|
selectkeys(("select keys"))
|
||||||
|
mask["enciphered mask:\n [ 914 20341 2788 56757 30976 10603 61460 23234 47763 12074]"]
|
||||||
|
mask_key["mask key:\n[23832 11427 59440 48739 10483 30872 4800 48753 55621 53879]"]
|
||||||
|
space:2
|
||||||
|
|
||||||
|
xor1(("XOR"))
|
||||||
|
mask --> xor1
|
||||||
|
mask_key --> xor1
|
||||||
|
selected_keys --> selectkeys
|
||||||
|
login_keypad --> selectkeys
|
||||||
|
space:3
|
||||||
|
|
||||||
|
ordered_keys["ordered keys:\n[[ 0 28 38 48 22 14 51 16 44]
|
||||||
|
[27 37 2 3 31 5 6 34 8]
|
||||||
|
[45 46 29 39 13 50 33 43 17]
|
||||||
|
[45 46 29 39 13 50 33 43 17]]"]
|
||||||
|
user_position_key["user position key:\n[58068 33848 20979 58547 24202 53969 27574 25558 64861]"]
|
||||||
|
passcode_pos["ordered user passcode positions:\n[24202 25558 58068 25558 20979 20979 58068 58547 25558 64861]"]
|
||||||
|
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[4, 7, 0, 7, 2, 2, 0, 3, 7, 8]"]
|
||||||
|
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[22, 34, 45, 43]"]
|
||||||
|
prop["combined_property_key\n[62032 50130 36776 54558 8506 61182 6770 6684 21325 58903 51619 53457
|
||||||
|
24017 10096 25891 36737 43828 60364 23965 63299 43548 43762 63289 61210
|
||||||
|
16490 21923 14215 6365 4383 48550 62830 53206 5237 2426 49278 33751
|
||||||
|
21542 2104 49342 42984 62776 19754 59167 25211 60 58461 118 9841
|
||||||
|
52387 3482 40915 54740 30225 8961]"]
|
||||||
|
cipheredhashed["hashed ciphered passcode:\n$2b$12$c62ezzyLW3QzUMjYUPSioexdMtSuJKzSM4KLkdKhWIiuNzcxOfT8m"]
|
||||||
|
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[63289 49278 58461 25211]"]
|
||||||
|
sel --> passcode_prop
|
||||||
|
space:5
|
||||||
|
|
||||||
|
cipher(("encipher"))
|
||||||
|
passcode_prop --> cipher
|
||||||
|
space:5
|
||||||
|
|
||||||
|
cipheredpass["ciphered passcode:\n[42032 16430 13238 32944 52662 31196 41361 14925 10153 11854]"]
|
||||||
|
cipher --> cipheredpass
|
||||||
|
space:7
|
||||||
|
|
||||||
|
|
||||||
|
comp{"compare"}
|
||||||
|
cipheredpass --> comp
|
||||||
|
cipheredhashed --> comp
|
||||||
|
space:5
|
||||||
|
|
||||||
|
suc(("success"))
|
||||||
|
comp --"Equal"--> suc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Renew nKode
|
||||||
|
|
||||||
|
nKode renewal is a three step process:
|
||||||
|
1. Renew Customer Properties
|
||||||
|
2. Renew User Keys
|
||||||
|
3. Refresh User on Login
|
||||||
|
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart
|
||||||
|
subgraph Renew Customer Properties
|
||||||
|
old_prop["`old customer property key:<br/>[ 4830 27406 45287 16089 51119 63121 2006 55056 13259 61408 27069 3731
|
||||||
|
33742 9067 56287 33792 13904 36960 60733 9825 13381 38569 14922 32065
|
||||||
|
19984 7725 40973 39345 17024 45969 50409 60464 13089 53033 15586 2681
|
||||||
|
47372 30887 53937 34314 11173 4489 1624 16145 51437 27147 10535 44753
|
||||||
|
49059 10487 9464 42806 59962 13593]`"]
|
||||||
|
new_prop["`new customer property key:<br/>[40493 16536 22567 8632 16931 48077 38465 62133 61510 60074 30483 15029
|
||||||
|
32328 35555 12264 4839 56666 52299 23010 54024 11530 38809 33384 9334
|
||||||
|
53340 25808 36388 7068 48724 2963 19292 41164 31037 24848 7109 29039
|
||||||
|
26458 18532 7462 19458 51071 45191 60228 22739 41943 36765 29356 35589
|
||||||
|
3387 28997 31698 23822 30837 4299]`"]
|
||||||
|
old_pos["`old customer position key:<br/>[27207 46525 55993 61909 45186 37136 48838 64827 14808]`"]
|
||||||
|
new_pos["`new customer position key:<br/>[ 8625 16938 65018 7492 24125 667 1225 54737 47670]`"]
|
||||||
|
xor1(("XOR"))
|
||||||
|
xor2(("XOR"))
|
||||||
|
xor_prop["`xor property key:<br/>[36083 11158 59584 8033 34188 19804 37271 9637 50061 1354 7854 13350
|
||||||
|
64902 43400 62519 38631 60170 23595 46303 62825 6479 304 47138 22839
|
||||||
|
40524 31485 11817 33325 64724 47106 36789 19708 18972 44601 10023 31510
|
||||||
|
56918 12483 53143 51720 60634 41230 60700 26562 27450 58774 23435 9684
|
||||||
|
45720 22962 24362 64056 37455 9682]`"]
|
||||||
|
xor_pos["`xor position key:<br/>[19446 63383 10051 60561 61119 37771 47631 10474 33774]`"]
|
||||||
|
old_prop --> xor1
|
||||||
|
new_prop --> xor1
|
||||||
|
xor1 --> xor_prop
|
||||||
|
old_pos --> xor2
|
||||||
|
new_pos --> xor2
|
||||||
|
xor2 --> xor_pos
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Renew User Keys
|
||||||
|
users@{shape: procs, label: "users"}
|
||||||
|
users --> eachuser
|
||||||
|
subgraph eachuser [for each user]
|
||||||
|
subgraph old user keys
|
||||||
|
old_user_pos["`combined position key:<br/>[58068 33848 20979 58547 24202 53969 27574 25558 64861]`"]
|
||||||
|
old_user_prop["`property key:<br/>[57486 43228 16207 60359 59029 6255 7588 52492 24710 2551 40990 56898
|
||||||
|
56863 1051 48892 2945 40292 31660 45216 53538 40537 15451 52595 37467
|
||||||
|
3706 19342 38794 33132 21407 3639 12679 9190 10068 50771 64668 35246
|
||||||
|
60714 28831 4623 8674 56989 23715 57671 23914 51409 36438 10577 34976
|
||||||
|
29440 9581 47915 29410 39979 5656]`"]
|
||||||
|
old_renew["renew: False"]
|
||||||
|
end
|
||||||
|
xor3(("XOR"))
|
||||||
|
xor4(("XOR"))
|
||||||
|
old_user_pos --> xor3
|
||||||
|
xor_pos --> xor3
|
||||||
|
xor3 --> inter_user_pos
|
||||||
|
old_user_prop --> xor4
|
||||||
|
xor_prop --> xor4
|
||||||
|
xor4 --> inter_user_prop
|
||||||
|
subgraph inter_user[intermediate user keys]
|
||||||
|
inter_user_pos["`combined position key:<br/>[50021 50706 44041 63991 183 53322 28543 46599 18283]`"]
|
||||||
|
inter_user_prop["`property key:<br/>[27773 33610 55183 62630 25369 21811 35891 59561 41739 3261 48816 60004
|
||||||
|
9113 44435 19147 40294 30318 10119 1151 9291 34582 15723 30033 52076
|
||||||
|
36918 12659 47523 833 44875 46645 48690 28442 27976 26730 56251 62136
|
||||||
|
13180 16476 56728 60394 12871 64941 3163 15016 41963 27584 29402 44404
|
||||||
|
49560 31967 58369 35034 3684 13258]`"]
|
||||||
|
inter_renew["renew: True"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Refresh User on Login
|
||||||
|
login["First login post renew"]
|
||||||
|
inter_user --> login
|
||||||
|
subgraph new_user [New User Keys]
|
||||||
|
new_user_pos["`combined position key:<br/>[41920 44706 35397 43292 52009 11204 43818 26002 28955]`"]
|
||||||
|
new_user_prop["`property key:<br/>[50355 56723 59762 39268 44255 59491 12736 62545 3731 51049 48946 10598
|
||||||
|
23999 55461 35771 20498 38352 13185 17075 30409 22199 3533 32360 12423
|
||||||
|
10680 48407 6174 11559 44174 8103 37520 52514 30628 49367 7063 8839
|
||||||
|
30149 1724 51332 64105 26257 48370 17405 42481 4953 43432 15038 37511
|
||||||
|
62432 22826 16312 39525 13907 33285]`"]
|
||||||
|
new_renew["renew: False"]
|
||||||
|
end
|
||||||
|
login --> new_user
|
||||||
|
end
|
||||||
|
|
||||||
|
```
|
||||||
@@ -9,6 +9,7 @@ from string import ascii_lowercase
|
|||||||
from docs.scripts.utils import render_markdown_template, emojis
|
from docs.scripts.utils import render_markdown_template, emojis
|
||||||
from src.models import NKodePolicy, KeypadSize
|
from src.models import NKodePolicy, KeypadSize
|
||||||
from src.nkode_api import NKodeAPI
|
from src.nkode_api import NKodeAPI
|
||||||
|
from src.user_cipher import UserCipher
|
||||||
from src.utils import select_keys_with_passcode_values
|
from src.utils import select_keys_with_passcode_values
|
||||||
|
|
||||||
def display_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
|
def display_keypad(icons_array: np.ndarray, props_per_key: int) -> str:
|
||||||
@@ -65,6 +66,17 @@ if __name__ == "__main__":
|
|||||||
login_keypad = api.get_login_keypad(username, customer_id)
|
login_keypad = api.get_login_keypad(username, customer_id)
|
||||||
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad,
|
selected_keys_login = select_keys_with_passcode_values(passcode_property_indices, login_keypad,
|
||||||
keypad_size.props_per_key)
|
keypad_size.props_per_key)
|
||||||
|
|
||||||
|
old_props = customer.cipher.property_key.copy()
|
||||||
|
old_pos = customer.cipher.position_key.copy()
|
||||||
|
customer.cipher.property_key = np.random.choice(2 ** 16, size=keypad_size.total_props, replace=False)
|
||||||
|
customer.cipher.position_key = np.random.choice(2 ** 16, size=keypad_size.props_per_key, replace=False)
|
||||||
|
new_props = customer.cipher.property_key
|
||||||
|
new_pos = customer.cipher.position_key
|
||||||
|
props_xor = new_props ^ old_props
|
||||||
|
pos_xor = new_pos ^ old_pos
|
||||||
|
user = customer.users[username]
|
||||||
|
new_user_cipher = UserCipher.create(keypad_size, customer.cipher.position_key, policy.max_nkode_len)
|
||||||
context = {
|
context = {
|
||||||
"max_nkode_len": policy.max_nkode_len,
|
"max_nkode_len": policy.max_nkode_len,
|
||||||
"numb_of_keys": keypad_size.numb_of_keys,
|
"numb_of_keys": keypad_size.numb_of_keys,
|
||||||
@@ -89,5 +101,15 @@ if __name__ == "__main__":
|
|||||||
"selected_keys": selected_keys_login,
|
"selected_keys": selected_keys_login,
|
||||||
"login_keypad": display_keypad(login_keypad, keypad_size.props_per_key),
|
"login_keypad": display_keypad(login_keypad, keypad_size.props_per_key),
|
||||||
"ordered_keys": login_keypad.reshape(-1, keypad_size.props_per_key)[selected_keys_login],
|
"ordered_keys": login_keypad.reshape(-1, keypad_size.props_per_key)[selected_keys_login],
|
||||||
|
"old_props": old_props,
|
||||||
|
"new_props": new_props,
|
||||||
|
"old_pos": old_pos,
|
||||||
|
"new_pos": new_pos,
|
||||||
|
"xor_props": props_xor,
|
||||||
|
"xor_pos": pos_xor,
|
||||||
|
"inter_user_position": user.cipher.combined_position_key ^ pos_xor,
|
||||||
|
"inter_user_property_key": user.cipher.property_key ^ props_xor,
|
||||||
|
"new_user_position": new_user_cipher.combined_position_key,
|
||||||
|
"new_user_property_key": new_user_cipher.property_key,
|
||||||
}
|
}
|
||||||
render_markdown_template(Path("../templates/encipher_decipher_nkode.template.md"), Path("../encipher_decipher_nkode.md"), context)
|
render_markdown_template(Path("../templates/encipher_decipher_renew_nkode.template.md"), Path("../encipher_decipher_renew_nkode.md"), context)
|
||||||
|
|||||||
@@ -204,5 +204,71 @@ block-beta
|
|||||||
|
|
||||||
suc(("success"))
|
suc(("success"))
|
||||||
comp --"Equal"--> suc
|
comp --"Equal"--> suc
|
||||||
|
```
|
||||||
|
|
||||||
|
### Renew nKode
|
||||||
|
|
||||||
|
nKode renewal is a three step process:
|
||||||
|
1. Renew Customer Properties
|
||||||
|
2. Renew User Keys
|
||||||
|
3. Refresh User on Login
|
||||||
|
|
||||||
|
|
||||||
|
{% set md_tick = '`' %}
|
||||||
|
```mermaid
|
||||||
|
flowchart
|
||||||
|
subgraph Renew Customer Properties
|
||||||
|
old_prop["`old customer property key:<br/>{{old_props}}`"]
|
||||||
|
new_prop["`new customer property key:<br/>{{new_props}}`"]
|
||||||
|
old_pos["`old customer position key:<br/>{{old_pos}}`"]
|
||||||
|
new_pos["`new customer position key:<br/>{{new_pos}}`"]
|
||||||
|
xor1(("XOR"))
|
||||||
|
xor2(("XOR"))
|
||||||
|
xor_prop["`xor property key:<br/>{{xor_props}}`"]
|
||||||
|
xor_pos["`xor position key:<br/>{{xor_pos}}`"]
|
||||||
|
old_prop --> xor1
|
||||||
|
new_prop --> xor1
|
||||||
|
xor1 --> xor_prop
|
||||||
|
old_pos --> xor2
|
||||||
|
new_pos --> xor2
|
||||||
|
xor2 --> xor_pos
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Renew User Keys
|
||||||
|
users@{shape: procs, label: "users"}
|
||||||
|
users --> eachuser
|
||||||
|
subgraph eachuser [for each user]
|
||||||
|
subgraph old user keys
|
||||||
|
old_user_pos["`combined position key:<br/>{{user_position_key}}`"]
|
||||||
|
old_user_prop["`property key:<br/>{{user_property_key}}`"]
|
||||||
|
old_renew["renew: False"]
|
||||||
|
end
|
||||||
|
xor3(("XOR"))
|
||||||
|
xor4(("XOR"))
|
||||||
|
old_user_pos --> xor3
|
||||||
|
xor_pos --> xor3
|
||||||
|
xor3 --> inter_user_pos
|
||||||
|
old_user_prop --> xor4
|
||||||
|
xor_prop --> xor4
|
||||||
|
xor4 --> inter_user_prop
|
||||||
|
subgraph inter_user[intermediate user keys]
|
||||||
|
inter_user_pos["`combined position key:<br/>{{inter_user_position}}`"]
|
||||||
|
inter_user_prop["`property key:<br/>{{inter_user_property_key}}`"]
|
||||||
|
inter_renew["renew: True"]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Refresh User on Login
|
||||||
|
login["First login post renew"]
|
||||||
|
inter_user --> login
|
||||||
|
subgraph new_user [New User Keys]
|
||||||
|
new_user_pos["`combined position key:<br/>{{new_user_position}}`"]
|
||||||
|
new_user_prop["`property key:<br/>{{new_user_property_key}}`"]
|
||||||
|
new_renew["renew: False"]
|
||||||
|
end
|
||||||
|
login --> new_user
|
||||||
|
end
|
||||||
|
|
||||||
```
|
```
|
||||||
Reference in New Issue
Block a user