Files
pynkode/docs/encipher_decipher_nkode.md
2025-03-26 04:29:48 -05:00

8.2 KiB

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

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

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

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

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