Files
pynkode/docs/encipher_decipher_nkode.md
2025-03-25 14:50:48 -05:00

5.1 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: [50817 32783 33745 35836 30092 4212 15938 64571 58354 41241 3649 38852 37860 47294 10501 43278 9946 60484 34443 38446 57997 32874 49251 58321 15849 40891 43566 53732 31357 5248 22060 15762 23773 10428 22850 7975 11108 23454 32723 40871 6994 35130 41638 13889 6569 20765 56191 37770 4448 37031 30452 43080 24525 44717]
  • position key: [25392 13634 17753 25555 61290 50870 49934 53104 9796]

User Cipher

  • property key: [35724 37130 47630 20125 52673 62248 61979 44917 17470 11483 20317 56084 34699 49571 32249 15009 43246 57623 21032 62384 61961 34049 1963 5370 1121 47700 26633 59166 16526 38173 56846 41594 54438 8714 46049 25028 38681 2017 39749 42164 38277 19216 23760 35115 23020 18954 26604 50262 21588 62239 30226 58722 12644 39141]
  • passcode key: [51522 14440 21036 1484 4829 51359 61560 41543 23848 29080]
  • combined position key: [14972 5803 54986 46940 19674 32943 38431 42194 29083]
  • mask key: [15948 8251 52095 4511 25902 21701 15340 4458 15137 44295]

Combined Postion Key

block-beta
  columns 2
  user_pos["user position key:\n[22860  9193 37779 54415 41904 17945 21777 27554 22495]"]
  customer_pos["customer position key:\n[25392 13634 17753 25555 61290 50870 49934 53104  9796]"]
  space:2
  xor(("XOR")):2
  user_pos --> xor
  customer_pos --> xor
  space:2
  comb_pos["combined position key\n[14972  5803 54986 46940 19674 32943 38431 42194 29083]"]:2
  xor --> comb_pos

User Keypad

  • keypad:
  • user passcode indices: [22, 6, 38, 21]

nKode Cipher

Passcode Hash

block-beta
columns 2
  cprop["customer_property_key\n[50817 32783 33745 35836 30092  4212 15938 64571 58354 41241  3649 38852
 37860 47294 10501 43278  9946 60484 34443 38446 57997 32874 49251 58321
 15849 40891 43566 53732 31357  5248 22060 15762 23773 10428 22850  7975
 11108 23454 32723 40871  6994 35130 41638 13889  6569 20765 56191 37770
  4448 37031 30452 43080 24525 44717]"]
  uprop["user_property_key\n[35724 37130 47630 20125 52673 62248 61979 44917 17470 11483 20317 56084
 34699 49571 32249 15009 43246 57623 21032 62384 61961 34049  1963  5370
  1121 47700 26633 59166 16526 38173 56846 41594 54438  8714 46049 25028
 38681  2017 39749 42164 38277 19216 23760 35115 23020 18954 26604 50262
 21588 62239 30226 58722 12644 39141]"]
  space:2
  xor1(("XOR")):2
  cprop --> xor1
  uprop --> xor1
  space:2
  prop["combined_property_key\n[19725  4357 14815 50529 47181 58204 52313 21326 42956 36290 16668 19664
  5231 31005 21756 37807 36404  3411 54435 26014  4228  1387 51144 63275
 14728  9711 49703 14074 15091 33181 34850 40936 34939  2742 60067 32483
 48253 23679 58518 15123 36567 49706 65142 49002 16453  6935 48275 22492
 17716 25528   230 19754 28329 13896]"]
  xor1 --> prop
  pass["user_passcode_indices\n[22, 6, 38, 21]"]
  space:2
  sel(("select\properties")):2
  pass --> sel
  prop --> sel
  space:2
  passcode["user passcode properties:\n[51144 52313 58518  1387]"]:2
  sel --> passcode
  space:2
  pad["zero pad to\nmax nkode length: 10"]:2
  passcode -->pad
  space:2
  paddedpasscode["padded passcode:\n[51144 52313 58518  1387     0     0     0     0     0     0]"]
  pad --> paddedpasscode
  passkey["passcode key:\n[51522 14440 21036  1484  4829 51359 61560 41543 23848 29080]"]
  space:2
  xor2(("XOR")):2
  passkey --> xor2
  paddedpasscode --> xor2
  space:2
  cipheredpass["ciphered passcode:\n[ 3722 62513 46778   167  4829 51359 61560 41543 23848 29080]"]:2
  xor2 --> cipheredpass
  space:2
  hash(("hash")):2
  cipheredpass --> hash
  space:2
  cipheredhashed["hashed ciphered passcode:\n$2b$12$AQRZP88momhTaKGYaPzdiuBybg7V49SiZ8y9PQMoT0plZrEsbYO.K"]:2
  hash --> cipheredhashed

Mask Encipher

block-beta
  columns 3
  passcode_idx["passcode indices:\n[22, 6, 38, 21]"]
  comb_pos["combined position key:\n[14972  5803 54986 46940 19674 32943 38431 42194 29083]"]
  cust_pos["customer position key:\n[25392 13634 17753 25555 61290 50870 49934 53104  9796]"]

  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, 6, 2, 3]"]
  propidx --> passcode_position_idx
  
  space:5
  pad1(("Pad with\nrandom indices"))
  passcode_position_idx --> pad1
        
  space:5
  posidx["Padded Passcode Position Indices:\n[4, 6, 2, 3, 7, 1, 8, 0, 5, 4]"]
  pad1 --> posidx
  space:1
  user_pos["user position key:\n[22860  9193 37779 54415 41904 17945 21777 27554 22495]"]
  xor1 --> user_pos
  
  space:4
  sel(("select positions"))
  user_pos --> sel
  posidx --> sel
  space:5
  passcode_pos["passcode positions:\n[41904 21777 37779 54415 27554  9193 22495 22860 17945 41904]"]
  sel --> passcode_pos
  mask_key["mask key\n[15948  8251 52095  4511 25902 21701 15340  4458 15137 44295]"]
  space:4
  xor2(("XOR"))
  mask_key --> xor2
  passcode_pos --> xor2
  space:5
  mask["enciphered mask:\n [40444 29994 22764 50448  3724 30508 27699 18470 32056  3767]"]
  xor2 --> mask