1. Initial attempts to validate the utility were unsuccessful.

    For reproducability by an independent third party, all validation was performed using desktop office software to generate random numbers from known 'Random Seed' values (see Table II, below) using a "Uniform" distribution.

    The initial approach involved the generation of numbers representing a possible combination of parameters from a population of all possible combinations of parameters.

    • A two-digit binary number was assigned to select parameter 'type'.
    • A three-digit binary number was assigned to select parameter 'base', in a manner similar to that used to select the special character set in the revised protocol.
    • A three-digit binary number was assigned to select one of the special character sets in Table V, below, for inclusion in the plain text alphabet.
    • Five-digit binary numbers were assigned to determine whether parameters 'keyword', 'key', and 'plaintext' contained valid or not valid characters, or both; escaped or not escaped characters, or both; or duplicates.

    Each test case was therefore represented by a single 23-digit binary number. The total number of possible combinations was 8,388,608. A later revision reduced the total number of possible combinations to 1,048,576 by reducing the number of digits assigned to parameters 'keyword', 'key', and 'plaintext' from five to four. A real number between 1 and the total number of possible combinations was generated. The number was rounded to the nearest integer value. This number was translated into binary. The digits of the number were then read from left to right, and used to generate the parameters for each test case: the first two digits represented parameter 'type', the second two represented parameter 'base', and so on.

    This approach was rejected because the inclusion of some variable number of special characters and some variable number of duplicates did not reliably result in valid parameters. Many test cases failed to produce meaningful ciphertext. It was determined the population of all possible combinations of parameters includes many invalid combinations. For example, this approach resulted in five of every eight test cases automatically being invalid because only '100', '010', and '001' were valid values for parameter 'base'.

    To resolve the problem, parameters were adjusted as necessary to produce meaningful ciphertext. However, no standard method reliably resulted in valid parameters. For example, converting letters to numbers in accordance with a known scheme (1337) sometimes resulted in valid parameters, but not in every test case, and converting some lower case characters into uppercase characters sometimes resulted in valid parameters, but not in every test case.

    An approach which required the manipulation of randomly generated parameters was determined to be too subjective, and the generation of, and subsequent rejection of, large numbers of invalid combinations in search of those combinations which are valid was determined to be too time consuming. An approach which reduced the number of invalid combinations, while still providing reproducibility and reasonable assurance the utility functions as intended, was adopted.

  2. The validation protocol was revised.
    1. Parameter selection.
      1. For parameters 'type', 'base', and 'set' one real number was randomly generated for each test case, as one of a series of twelve numbers, using the 'Random Seed' in Table II, below.
        1. For parameter 'type', a real number between 0 and 3 was randomly generated. The number was rounded to the nearest integer value. The integer value was converted to binary and used to determine the value of parameter 'type' in accordance with Table III, below.
        2. For parameter 'base', a real number between 1 and 3 was randomly generated. The number was rounded to the nearest integer value. The integer value was converted to binary and used to determine the value of parameter 'base' in accordance with Table IV, below.
        3. For parameter 'set', a real number between 0 and 7 was randomly generated. The number was rounded to the nearest integer value. The integer value was converted to binary and used to determine how many special characters to include in the plaintext alphabet, and from which special character set(s). A '1' in the first place ('1XX') corresponds to the first set, a '1' in the second place ('X1X') corresponds to the second set, and a '1' in the third place ('XX1') corresponds to the third set. Four characters from each selected set were randomly generated. See parameter 'special'.
      2. For parameter 'special', four real numbers between numbers representing the first and last characters in each selected set were randomly generated, from known 'Random Seed' values (see Table II, below). Each number was rounded to the nearest integer value. The integer values were converted to characters in accordance with Table V, below.
      3. For parameters 'keyword', 'key', and 'plaintext', twelve real numbers between 1 and 95 were randomly generated for each test case, from known 'Random Seed' values (see Table I, below). Each number was rounded to the nearest integer value. The integer values were converted to characters in accordance with Table VI, below.
    2. The validation protocol.

      For each combination of parameters selected:

      1. Verify the parameter 'type' selector selects the correct cipher method, and is reported correctly.
      2. Verify the parameter 'base' selector selects the correct base alphabet, and is reported correctly.
      3. Verify the parameter 'special' and unique selected special characters are reported correctly.
      4. Verify the intermediate variable 'plaintextAlphabet' is generated by inserting unique special characters, in ascending ASCII order, into the base plain text alphabet selected by parameter 'base', and is reported correctly.
      5. Verify the intermediate variable 'keyword' is generated by first extracting valid characters, then unique characters, from parameter 'keyword', in the order in which they occur in parameter 'keyword', and that parameter 'keyword' and intermediate variable 'keyword' are reported correctly.
      6. Verify the intermediate variable 'ciphertextAlphabet' is generated by appending all characters of the plain text alphabet not used by the unique key word to the unique key word in the order in which they occur in the plain text alphabet, and is reported correctly.
      7. Verify the intermediate variable 'key' is extracted from valid (but not necessarily unique) characters of parameter 'key', and that parameter 'key' and intermediate variable 'key' are reported correctly.
      8. Verify the intermediate variable 'plaintext' is generated by extracting valid (but not necessarily unique) characters from parameter 'plaintext', in the order in which they occur in parameter 'plaintext', and that parameter 'plaintext' and intermediate variable 'plaintext' are reported correctly.
      9. Verify the selected parameters and resulting intermediate variables produce correct ciphertext.
  3. Conclusion

    The selected parameters and resulting intermediate variables were validated in accordance with the validation protocol, above, and produced the ciphertext reported in Table I, below. The ciphertext may be reproduced from the selected parameters in Table II, below, using the utility or by hand, with one exception: the output of the 'Validate' button has since been revised to report both parameter 'special' and unique special characters, in lieu of only unique special characters reported initially. Columns 'Validate' and 'Tabula' link to the output of the 'Validate' and 'Tabula Recta' buttons for each test case.

    Overall, the results support the assertion that the utility works as intended. However, the total number of possible combinations for just one twelve-character parameter is 9512, which is a very large number, and it is therefore important to note that not all possible combinations can reasonably be tested.

    Revisions affecting the results will be documented as necessary.

    Table I - Results
    Test Case ciphertext Validate Tabula
    01 xot 01v.html 01t.html
    02 mHX1gM99 02v.html 02t.html
    03 gz+zn? 03v.html 03t.html
    04 nk9 04v.html 04t.html
    05 chHFpaCKm 05v.html 05t.html
    06 ct3g407 06v.html 06t.html
    07 zer4 07v.html 07t.html
    08 - none - 08v.html 08t.html
    09 4az,od4 09v.html 09t.html
    10 ag^c 10v.html 10t.html
    11 z 11v.html 11t.html
    12 g"7bmA-zR 12v.html 12t.html
Table II - Test Case Parameters
Test Case Parameter Random Seed Output
01 type 0001 0
00
base 0002 1
01
set 0003 0
000
special 0104 - none -
keyword 0105 2 65 85 18 31 90 22 58 22 23 67 95
! ` t 1 > y 5 Y 5 6 b ~
key 0106 2 1 42 87 61 7 31 49 70 5 67 1
!   I v \ & > P e $ b  
plaintext 0107 2 32 93 62 90 18 40 41 23 82 66 1
! ? | ] y 1 G H 6 q a  
02 type 0001 2
10
base 0002 3
11
set 0003 2
010
special 0204 12 14 21 21                
+ - > >                
keyword 0205 3 46 39 59 76 88 69 64 59 45 25 14
" M F Z k w d _ Z L 8 -
key 0206 3 77 91 34 12 5 78 56 12 28 24 14
" l z A + $ m W + ; 7 -
plaintext 0207 3 14 48 9 41 17 87 47 60 10 24 14
" - O ( H 0 v N [ ) 7 -
03 type 0001 1
01
base 0002 2
10
set 0003 2
010
special 0304 12 22 16 15                
+ ? / .                
keyword 0305 4 27 88 6 27 86 22 70 2 68 76 26
# : w % : u 5 e ! c k 9
key 0306 4 58 45 75 57 4 31 62 49 50 76 26
# Y L j X # > ] P Q k 9
plaintext 0307 4 89 2 50 86 15 40 54 2 32 76 26
# x ! Q u . G U ! ? k 9
04 type 0001 2
10
base 0002 2
10
set 0003 2
010
special 0404 12 20 21 20                
+ = > =                
keyword 0405 5 9 43 47 72 85 69 77 38 90 34 39
$ ( J N g t d l E y A F
key 0406 5 40 94 22 8 2 78 68 86 72 34 39
$ G } 5 ' ! m c u g A F
plaintext 0407 5 70 51 91 37 13 87 60 39 55 33 39
$ e R z D , v [ F V @ F
05 type 0001 2
10
base 0002 3
11
set 0003 2
010
special 0504 13 18 16 14                
, ; / -                
keyword 0505 6 84 91 88 23 83 22 83 75 18 86 51
% s z w 6 r 5 r j 1 u R
key 0506 6 21 48 63 52 95 31 75 28 95 85 52
% 4 O ^ S ~ > j ; ~ t S
plaintext 0507 6 52 6 38 82 12 40 66 76 77 85 52
% S % E q + G a k l t S
06 type 0001 1
01
base 0002 2
10
set 0003 5
101
special 0604 2 5 10 7 24 27 32 29        
! $ ) & [ ^ } '        
keyword 0605 7 65 46 35 68 82 69 89 17 41 43 64
& ` M B c q d x 0 H J _
key 0606 7 2 3 10 3 93 78 81 65 23 43 64
& ! " ) " | m p ` 6 J _
plaintext 0607 7 33 54 79 33 10 87 72 18 5 42 64
& @ U n @ ) v g 1 $ I _
07 type 0001 1
01
base 0002 2
10
set 0003 4
100
special 0704 2 3 5 2                
! " $ !                
keyword 0705 8 47 94 76 19 80 22 1 54 63 95 77
' N } k 2 o 5   U ^ ~ l
key 0706 8 78 52 51 48 92 31 87 7 45 94 77
' m S R O { > v & L } l
plaintext 0707 8 14 9 26 78 9 39 79 55 28 94 77
' - ( 9 m ( F n V ; } l
08 type 0001 3
11
base 0002 3
11
set 0003 5
101
special 0804 2 11 11 6 24 33 33 28        
! * * % [ ~ ~ _        
keyword 0805 9 28 49 23 63 79 68 8 91 85 52 89
( ; P 6 ^ n c ' z t S x
key 0806 9 59 6 92 93 90 77 93 44 68 52 89
( Z % { | y l | K c S x
plaintext 0807 9 90 58 67 29 7 86 85 91 50 51 90
( y Y b < & u t z Q R y
09 type 0001 2
10
base 0002 2
10
set 0003 6
110
special 0904 2 9 6 10 13 20 17 21        
! ( % ) , = : >        
keyword 0905 10 9 4 63 14 77 21 14 33 14 10 8
) ( # ^ - l 4 - @ - ) '
key 0906 10 40 55 39 44 88 30 6 81 90 9 8
) G V F K w = % p y ( '
plaintext 0907 10 71 12 14 74 6 39 91 34 72 9 8
) f + - i % F z A g ( '
10 type 0001 2
10
base 0002 2
10
set 0003 3
011
special 1004 13 18 12 16 24 29 23 27        
, ; + / [ ` @ ^        
keyword 1005 11 85 52 10 59 76 68 20 70 36 61 21
* t S ) Z k c 3 e C \ 4
key 1006 11 22 9 79 89 87 77 12 23 18 61 21
* 5 ( n x v l + 6 1 \ 4
plaintext 1007 11 52 61 54 24 4 86 3 71 95 61 21
* S \ U 7 # u " f ~ \ 4
11 type 0001 1
01
base 0002 1
01
set 0003 1
001
special 1104 24 27 28 31                
[ ^ _ |                
keyword 1105 11 66 7 51 10 74 21 27 12 58 19 33
* a & R ) i 4 : + Y 2 @
key 1106 11 3 58 26 40 85 30 18 60 41 19 33
* " Y 9 G t = 1 [ H 2 @
plaintext 1107 11 34 15 1 69 3 39 10 13 23 18 33
* A .   d " F ) , 6 1 @
12 type 0001 3
11
base 0002 3
11
set 0003 6
110
special 1204 2 3 1 3 13 14 12 14        
! "   " , - + -        
keyword 1205 12 47 55 92 55 72 68 33 49 81 71 46
+ N V { V g c @ P p f M
key 1206 12 78 13 67 85 84 77 24 2 63 70 46
+ m , b t s l 7 ! ^ e M
plaintext 1207 12 15 64 42 20 1 86 16 50 45 70 46
+ . _ I 3   u / Q L e M
Table III - Type Parameters
  X
0 1
Y 0 keyword autokey
1 vigenere runningkey
Table IV - Base Parameters
  X
0 1
Y 0 - not used - 36
1 26 62
Table V - Special Character Sets
Set: Special characters:
         1         2         3   
123456789012345678901234567890123
ALL  !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
1XX  !"#$%&'()*                      
X1X            +,-./:;<=>?           
XX1                       @[\]^_`{|}~
Table VI - Keyword, Key, and Plaintext Character Set
         1         2         3         4         5         6         7         8         9     
12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345
 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

Last updated: Tuesday, 16 November, 2010

Home > Encryptor