SYSTEM AND METHOD FOR QUANTUM-SAFE AUTHENTICATION, ENCRYPTION AND DECRYPTION OF INFORMATION

20230224148 · 2023-07-13

    Inventors

    Cpc classification

    International classification

    Abstract

    Aspects and embodiments of the present invention relate to a method and system for generating a private cryptographic key for use in a secure cryptogram for transmission between a first entity and a second entity. The method may comprise: selecting a random vector defined in an n-dimensional vector space shared between the first entity and the second entity, the vector comprising one or more component coordinates defined in the n-dimensional vector space, each component coordinate being associated with one or more bits; determining the one or more bits associated with each component coordinate comprised in the random vector; and generating the private key in dependence on the one or more bits associated with each component coordinate comprised in the random vector.

    Claims

    1-63. (canceled)

    64. A method of generating a private cryptographic key for use in a secure cryptogram for transmission between a first entity and a second entity, the method comprising: generating an n-dimensional vector space shared between the first entity and the second entity prior to selecting a random vector in the n-dimensional vector space, comprising the steps of: generating a random binary string; dividing the random binary string into a plurality of discrete sub-sections, each sub-section comprising a plurality of bits; associating an index to each sub-section; projecting the binary string into the n-dimensional vector space using a projection function, the projection function mapping the indices associated with at least some of the subsections, to different coordinate values in the n-dimensional vector space; selecting the random vector defined in the n-dimensional vector space shared between the first entity and the second entity, comprising generating a random sequence of indices and selecting the random vector by identifying the coordinate value associated with each index in the sequence of randomly generated indices, each coordinate value being associated with a plurality of bits; determining the plurality of bits associated with each coordinate value comprised in the random vector, by identifying the index associated with each coordinate value, and determining the plurality of bits associated with each coordinate value in dependence on the identified index; and generating the private key in dependence on the plurality of bits associated with each coordinate value comprised in the random vector.

    65. The method of claim 64, comprising: transmitting information associated with the random vector to the second entity, the information associated with the random vector enabling the second entity to recover the private key from the shared n-dimensional vector space.

    66. The method of claim 65, wherein the information associated with the random vector comprises information indicative of the one or more coordinate values associated with the random vector.

    67. The method of claim 65, comprising: generating the cryptogram in dependence on the private key; and transmitting the cryptogram to the second entity, the cryptogram comprising confidential information recoverable by the second entity in dependence on the recovered private key.

    68. The method of claim 67, comprising: compressing the confidential information with a lossless compression algorithm; combining the compressed confidential information with random data; generating the cryptogram by encrypting the compressed confidential information combined with the random data; wherein the cryptogram comprises information enabling the confidential information to be distinguished from the random data; and optionally compressing the random data with a lossy compression algorithm; and generating the cryptogram by encrypting the compressed confidential information combined with the compressed random data.

    69. The method of claim 67, comprising the steps of: generating a first nonce; encrypting the first nonce using the generated private key; forwarding the encrypted first nonce from the first entity to the second entity; receiving a response message from the second entity comprising a second nonce; determining if the first nonce and the second nonce are correlated; authenticating the second entity in dependence on the first nonce and the second nonce being correlated; and optionally comprising the steps of: generating a third nonce; encrypting the third nonce using the generated private key; forwarding the encrypted third nonce from the second entity to the first entity; receiving a response message from the first entity comprising a fourth nonce; determining if the third nonce and the fourth nonce are correlated; and authenticating the first entity in dependence on the third nonce and the fourth nonce being correlated.

    70. The method of claim 64, comprising: generating the random vector using a mathematical function, the mathematical function comprising a pseudo-random number generator configured to generate random coordinate values defining the random vector; and optionally generating the random vector using a mathematical function comprising a pseudo-random number generator seeded with a value from a source of random numbers.

    71. The method of claim 64, comprising: generating the random vector using a quantum key distribution protocol executed between the first and second entities, the quantum key distribution protocol being configured to generate the random sequence of indices, and associating the random sequence of indices with coordinate values defining the random vector.

    72. The method of claim 64, wherein the binary string comprises a linear array of bits, and the projection function is configured to map the linear array of bits to an n-dimensional array of bits comprised in the n-dimensional vector space.

    73. The method of claim 64, wherein the n-dimensional vector space comprises any one of: i. one or more fractal dimensions; and ii. one or more nested complex dimensions.

    74. The method of claim 64, wherein the projection function is a state-dependent one-way function.

    75. The method of claim 64, wherein the step of generating the random binary string comprises: the first entity generating a first random binary string; the second entity generating a second random binary string; and combining portions of the first and second binary strings to generate the binary string.

    76. The method of claim 75, wherein the portions of the first and second binary strings are randomly combined.

    77. The method of claim 75, wherein the portions of the first and second binary strings are combined in accordance with one or more of: i. a mixing function; ii. a merging function; iii. a substitute function; iv. an exchange function; v. a shuffle function; and vi. a riffle shuffle function.

    78. The method of claim 75, comprising combining portions of the first and second binary strings using an exclusive OR operator “XOR”.

    79. The method of claim 64, comprising: generating the shared n-dimensional vector space in a secure environment.

    80. The method of claim 64, comprising: generating the random sequence of indices using a random number generator.

    81. The method of claim 64 comprising: partitioning the random binary string into two or more separate partitions; and projecting at least a portion of the separate partitions into the n-dimensional vector space using the projection function.

    82. The method of claim 81, comprising: partitioning the random binary string into a plurality of partitions of equal length; or partitioning the random binary string into a random number of partitions, each partition having a random length.

    83. The method of claim 64, comprising: generating the private key by combining the plurality of bits associated with each component coordinate comprised in the random vector; and optionally generating the private key by combining the plurality of bits associated with adjacent component coordinates comprised in the random vector.

    84. The method of claim 83, wherein the plurality of bits associated with each component coordinate comprised in the random vector are combined in accordance with a logical operator; and optionally wherein the logical operator is an exclusive OR operator “XOR”.

    85. The method of claim 64, wherein the private key is a one-time key, and the method comprises: generating a new private key for each new cryptogram required for transmission between the first entity and the second entity.

    86. A system for generating a private cryptographic key for use in a secure cryptogram for transmission between a first device and a second device, the system comprising a processor and a random number generator, the random number generator configured to generate a random binary string and a random sequence of indices, and wherein the processor is configured to: generate an n-dimensional vector space shared between the first device and the second device, comprising the steps of: dividing the random binary string generated by the random number generator into a plurality of discrete sub-sections, each sub-section comprising a plurality of bits; associating an index to each sub-section; projecting the binary string into the n-dimensional vector space using a projection function, the projection function mapping the indices associated with at least some of the subsections, to different coordinate values in the n-dimensional vector space; selecting a random vector defined in the n-dimensional vector space shared between the first device and the second device, by identifying the coordinate value associated with each index comprised in the random sequence of indices generated by the random number generator, each coordinate value being associated with a plurality of bits; determining the plurality of bits associated with each coordinate value comprised in the random vector, by identifying the index with each coordinate value, and determining the plurality of bits associated with each coordinate value in dependence on the identified index; and generating the private key in dependence on the plurality of bits associated with each coordinate value comprised in the random vector.

    Description

    BRIEF DESCRIPTION OF DRAWINGS

    [0098] FIG. 1 is a diagram illustrating conventional versus QSE.

    [0099] FIG. 2 is a schematic diagram illustrating the general process for QSE in accordance with an embodiment of the present invention.

    [0100] FIG. 3 is a block diagram illustrating true random number generation for QSE.

    [0101] FIG. 4 illustrates a high-level block design of a hardware implementation of a QSE device.

    [0102] FIG. 5 illustrates the use of a commutative operator such as XOR in encryption and decryption.

    [0103] FIG. 6 illustrates the process of entangling devices to produce an entangled one-time-pad (eOTP).

    [0104] FIG. 7 illustrates the process of calculating physical one-time-pads (pOTPs) during the entangling of two or more devices.

    [0105] FIG. 8 illustrates the process of entangling two pOTPs using a bitwise operation.

    [0106] FIG. 9 illustrates the process of performing randomness extraction on random data.

    [0107] FIG. 10 illustrates the process of partitioning a pOTP to produce a physical, partitioned one-time-pad (ppOTP), and then projecting the ppOTP into hyper-dimensional space.

    [0108] FIG. 11 illustrates a method for creating a final OTP from a starting OTP using different exemplary workflows.

    [0109] FIG. 12 illustrates the basic method for encrypting data using an eOTP and original plaintext data.

    [0110] FIG. 13 illustrates the basic method for decrypting data using an eOTP and the cipher generated from the encryption process.

    [0111] FIG. 14 illustrate in pseudo-code how an encryption process might be implemented in software.

    [0112] FIG. 15 illustrate in pseudo-code how a decryption process might be implemented in software.

    [0113] FIG. 16 illustrates how a device could connect to a computer network in a quantum-safe fashion.

    [0114] FIG. 17 illustrates an example of how computer networks could communicate over great distances in a quantum-safe fashion.

    [0115] FIG. 18 illustrates the process of authentication between two or more devices.

    [0116] FIG. 19 illustrates the process of broadcasting information using datagrams.

    [0117] FIG. 20 illustrates a flowchart which describes the basic logic involved in authentication and communication for QSE.

    [0118] FIG. 21 illustrates physical access to a QSE device for OTP readout.

    [0119] FIG. 22 illustrates possible embodiments of the present invention on the software-hardware spectrum.

    [0120] FIG. 23 illustrates a graphical representation of a complex space and an unstructured random walk.

    [0121] FIG. 24 illustrates a graph of the probability that a randomly selected set G breaking a set of S elements in a complex space of a googol (10.sup.10) elements.

    DETAILED DESCRIPTION OF THE INVENTION

    [0122] A detailed description of one or more embodiments of the present invention is provided below along with accompanying figures that illustrate the principles of the invention. This detailed description and accompanying figures illustrate the present invention by way of illustrative example only, and is not to be construed as limiting. Alternative embodiments are envisaged that are not explicitly described herein, but which adopt the operative principles of the embodiments described herein, and which would be obvious to the person skilled in the art on the basis of the presently provided illustrative examples. The description will clearly enable one skilled in the art to make and use the invention, and describes several embodiments, adaptations, variations and alternatives and uses of the invention, including what is presently believed to be the best mode and preferred embodiment for carrying out the invention. It is to be understood that routine variations and adaptations can be made to the invention as described, and such variations and adaptations squarely fall within the spirit and scope of the invention. For the purpose of clarity, technical material that is known in the technical fields related to the invention has not been described in detail so that the invention is not unnecessarily obscured. Such details relate typically to background information widely known in the field of cryptography, and which would form part of the general background knowledge of the person skilled in the art.

    [0123] In FIG. 1, conventional encryption schemes are contrasted with the Quantum-Safe Encryption (QSE) approach disclosed herein. The schemes are abstracted and shown at a highly simplified functional block level showing sources and flow of entropy in the systems, omitting details of keys, mixing, merging, transposition or substitution. In AES encryption [100], a TRNG [105] is used as input to produce PRF data [120]. In 3DES [115], TRNG input [120] is converted to PRF output [125], and that output can become input again and reprocessed in a loop multiple times (three times to make the encryption process more secure). In conventional OTP encryption [130], input in the form of a table of data [140] can be converted into TRNG output [145]. In the quantum safe approach employed here [150], PRF input data [160] can be converted to TRNG output data [170], and this output can be reprocessed as input in a loop [175]. Similarly, TRNG input data [180] could also be used as input, producing TRNG output [170] which could then constitute input and be reprocessed in a loop [185]. Additionally, TRNG input [190] can be mapped to intermediate PRF data [195], which could then be used to produce TRNG output [170], which again could be reprocessed in a loop [198]. Overall, TRNG output data [170] maybe also be looped back to any input [160,180,190,195] in any order, sequence or iterations (not shown).

    [0124] In FIG. 2, a schematic illustration of an overall process flow for QSE is shown. First, an arbitrary number of devices (physical or virtual) containing data, which are illustrated by [200], [205], and [210], are connected to each other using USB connections, network connections, wireless communication, optical or similar means [215]. This connection can take place in a shielded/secure environment, like a Faraday cage when physically proximal, or over a network if the devices are remotely located from each other, e.g. in different countries, on different continents, in space, etc. The disclosed process can also take place on a single device to secure data on that device. Next, a physical OTP (pOTP) is created for each device, and in this figure this process is illustrated for 2 devices [220] and [225], although it could be for an arbitrary number of devices. Then, the pOTPs are “partitioned” into separate parts to create the partitioned, pOTPs (ppOTPs) [230], [235]. Using the ppOTPs, a virtual OTP (vOTP) is then created by projecting the ppOTP into complex space [240], [245]. Finally, the vOTPs are then entangled to create an entangled OTP or eOTP [250]. Once this step is complete, the devices can then be physically separated and then encrypted data can now be exchanged [270]. The order of these steps may be considered to commutative so may be applied in a different order.

    [0125] In FIG. 3, a method for generating true random information is illustrated. First, random information or stream of bits are created using a hardware based entropy generator, either a TRNG, or preferably a QRNG, or less ideally a software-based entropy generator for example PRNG, which is sub-optimal being deterministic since it may not generate a truly random stream of bits [300] or any combination mixed together. The random bits are then used as input to a true random number conditioner/generator (RNG) [310] which verifies that the information is indeed random, and then produces truly random numbers from the random bits [330]. Alternatively, random bits may be supplied as input from a quantum random number generator (QRNG) [320] to produce random numbers [340]. These random numbers generators are optionally combined to create a common Random Number Generator RNG [350] used as data to generate cryptographic information such as the pOTP. The RNG (which ideally consists of a TRNG/QRNG) may be conditioned with an unbiasing algorithm/randomness extractor. The source of the random information may preferably be located internally within the device or optionally solely or mixed with another externally connected generator [305].

    [0126] FIG. 4 outlines the physical design of an electronic circuit [400] which could be used to perform quantum-safe encryption. First, an initialization signal is sent to the device [405] to start generating random data for producing an OTP. The internal hardware-based random number generator (RNG) [410], which can be a QRNG or TRNG or can mix with or use an external RNG source [483], generates truly random/cryptographically secure random numbers for OTP production. A local OTP [415] is then created using the random data using programmed firmware [450], which can then be saved [480] into memory. As well, another circuit of the same/similar design could also be performing these steps and transmitting a remote OTP [430], which could be loaded [440] through a connection between the two devices. The creation of local OTPs [415] and loading remote OTPs [440] is executed in firmware [450] by the central processing unit (CPU) [460], microcode or hard-wired logic. Encryption and decryption operates independently. To start the usually asynchronous decoding process, which involves converting a cipher to plaintext, a “start decode” signal can be sent to the CPU [465]. The CPU will then transmit an acknowledgement [470]. Additionally, the CPU can be reset [475] by sending a reset signal, which will interrupt any process the CPU is executing at the time. The random-access memory (RAM) can be used for storing plaintext [485], and for output of the resulting cipher [490] during the encoding/encryption process. Conversely, ciphertext [495] can be converted back to plaintext [499] during the decoding/decryption process by storing and ciphertext and output of the plaintext. The Save Local and Load Remote can be used to exchange and mix the OTP between two devices with a simple link. With multiple devices, a network comprising a ring ensures the OTP is exchanged between every device. Other network topologies, such as ring or broadcast or token, are possible depending on the type of connection used (wired, wireless or other).

    [0127] In FIG. 5, the process of calculating a cipher, and then converting cipher data back to original data is illustrated using a reversible commutative operator (preferably like exclusive OR, or XOR which is a bitwise logical operator which returns the value 1 if either bit of the two inputs is different, and 0 if the bits are the same). Alternatively, the process of transposition and or substitution could be used. In this calculation, the bits of the original data are XORed with the bits of the OTP data, resulting in the creation of a cipher. Original 8-bit data [500] is then XORed (or another reversible commutative operator used) with the OTP random bit information [520] to produce the cipher data [530]. This overall process can be described as encryption [540]. After transfer between devices or in time, the encryption process can be reversed, where the cipher data is XORed with the same OTP random bit information [520] to produce the original data [510], and this overall process can be described as decryption [550]. This process is inherently parallel and can be performed in hardware and or software on large blocks of information and need not be limited to 8 and 16 bits, with 64, 128, or larger units or word sizes also possible.

    [0128] FIG. 6 describes the process of creating an entangled OTP, or eOTP, from physically linking an arbitrary number of electronic devices. First, the devices [600], [610], [620], which could be smartphones, tablets, computers, laboratory equipment, or other electronics, or contained with embodied hardware or microcode, are physically linked to each other using a wired, wireless or optical connections such as Ethernet cables, USB connections, or other similar means preferably within a Faraday cage or other shielding [630] to maintain privacy. Each device will produce an OTP produced by its local RNG, which is mixed/merged/entangled with all the other device's OTPs, and then the devices physically separated before being used to create encrypted cipher text [640]. This physical connection in this protected environment allows the OTPs created for each device's original random data to be “entangled” (if they pass security and entropy checks/authentication) and produces a single OTP, called the eOTP [650]. Each of the devices when entangled have all or part of their OTP's set to the same identical random data.

    [0129] If the devices do not pass security checks, contain low quality random data or fail to authenticate, then a stream random noise is produced, rather than eOTP data. In the case of an unauthorized individual attempting to perform cryptanalysis by creating a predictable pattern to enable later decryption, random noise, generated by each devices' RNG [660], makes it difficult for hackers to determine if eOTP data is being transmitted or not or even if the random data should be used at all. The random noise is not mixed/merged/entangled with any other device's so at a later stage the unauthorized individual's device(s) will be excluded and unable to decrypt the other devices cipher text. After the eOTP is created, the devices can then be separated and their data is now securely encrypted. Creating the eOTP is a one-time process and will not be repeated until reset to manufacturers default settings. When only a fraction of the OTP capacity is entangled, the remaining capacity maybe be used and this process repeated with another possibly different group of devices. For additional security measure, resetting the device without a partner, by being self-partnered destroys the contents of all local OTPs within the device and across hardware software embodiments writes new random information into the OTPs rendering the device unable to decrypt any of the previous encrypted ciphertext such that it cannot participate in encryption, or be linked to any recorded or previous encryptions.

    [0130] In FIG. 7, the linking process between two or more devices is illustrated. Given two devices, device 1 [700] and device 2 [705], a signal is sent to both devices to start the calculation of an OTP on each device [710]. The signal also synchronizes the devices so that they can generate their OTPs at the same time. During the calculation of the OTP, the RNGs in each device [715], [720] will generate random number data which will create randomized bit data that comprised the OTP. These OTPs are then stored on each device [740], [750]. These locally stored OTPs are then exchanged between devices during the linking process and stored on each opposing device [760], [770], and then used to generate a new eOTP [730]. The simple exchange between 2 devices may be extended to multiple devices using a ring buffer to circulate the local pOTP to every other device so the resulting entangled eOTP contains a mixture of all the devices local pOTPs. This one-time process can be described as an “early bind” between devices as no further exchange of keys/OTPs is required to encrypt or decrypt information. With self-partnered devices local [740], [750] and remote [760], [770] OTPs connect only to the same device, or combination of the Start OTP Sync signals [710] may be used to create a new unrelated OTP.

    [0131] FIG. 8 depicts the process of entangling two OTPs using different approaches. In the first example, OTP data from two devices [800], [810] are entangled by alternating their bits to form an eOTP [820]. This process of alternating information from different sources is referred to as a riffle shuffle. In the second example, the OTP data [800], [810] are randomly combined to form an eOTP [830], through a process that can be described as random shuffling. Other processes for producing eOTPs are possible, such as producing a mix/merge/transpose/substitute shuffle and preferably the XOR operator.

    [0132] FIG. 9 depicts the process of executing randomness extraction using random data that might comprise an OTP or OTPs or source of random numbers. A number of different unbiasing algorithms/randomness extraction processes can be used, and the one illustrated here is a basic von Neumann extractor. In a von Neumann extractor, a set of binary data is identified [900]. Then, consecutive pairs of bits are identified [910] resulting in pairs of bits [920]. The von Neumann extractor uses two rules [930], a new set of random data is generated. In the case of the von Neumann extractor, these rules are: if the two bits are equal, ignore the bits. However, if the bits are not equal, then the extractor retains the first bit [930] (optionally the second bit being the same albeit logical negation). This results in the final extracted data [940]. Randomness extraction processes can also include lossy or lossless compression.

    [0133] FIG. 10 depicts the process of partitioning a pOTP and then expanding the size of the OTP using a complex virtualization. First, a pOTP [1000] (which in this example consists of binary information stored in units of 4 bits, or nibbles) corresponding to raw original data, or compressed (ideally lossless) data is partitioned into p partitions using an algorithm that produces reproducible partitions. An example could include an algorithm which splits the pOTP preferably into n equal or nearly equal parts, or possibly an algorithm that randomly selects an arbitrary or prime/co-prime or near a prime number length for each of p partitions (within a certain range of values) and encodes a partition stop point in the data. The possible variability of partitions sizes renders the translation to the virtualization in complex space unpredictable to observers of unentangled devices. Error checking [1010] ensures that the data is partitioned in a reproducible fashion without loss of fidelity, and the information in the (any/all types of) OTP is checked to be random; for example asymptotically convergent with randomness extractor theoretical efficiency and/or compliant with NIST standards concerning entropy, computational and data quality. The result is a partitioned pOTP, or ppOTP [1020]. Next, the partitioned data is projected into a complex space [1040], such as a hypercube. In this process, a number of dimensions d (usually equal to the number of partitions p, but it can also have a different value) is used to access the stored data. It is important to note nested complex spaces can also be used. For instance, a larger 4-dimensional space could contain a small hyper-dimensional space of 8 dimensions, and another space of 13 dimensions. This makes partitioning more complicated, but also increases the complexity of the virtualization and therefore reduces the likelihood of cryptanalysis. Complex spaces can be created using a number of different approaches, such as procedural algorithms, randomly, or using simple methods (such as simply pre-selecting a single integer value, like d=4 dimensions). Additionally, fractal dimensions may be used, and different coordinate systems could be used for each dimension, and within a particular dimension. Partitioning can be done multiple times, making the process more complex, and less vulnerable to cryptanalysis.

    [0134] Each index into a dimension consists of a linear vector that can access/index stored data from a data partition (or multiple data partitions) in the ppOTP. Next, information from the ppOTP is then accessed using the linear vectors of memory that comprise coordinates in the complex space. For example, the ppOTP is partitioned into 4 partitions and projected into a 4-dimensional complex space. In software terms, this is the equivalent of taking a single dimensional array a[x . . . n] and splitting it into four preferably non-overlapping parts, p.sub.1[x.sub.1 . . . n.sub.1], p.sub.2[x.sub.2 . . . n.sub.2], p.sub.3[x.sub.3 . . . n.sub.3] and p.sub.4[x.sub.4 . . . n.sub.4]. Then, each element in each partition is stored/referenced in the linear arrays which comprise the dimensions of the complex space (in this example, a 4-dimensional complex space with dimensions d.sub.2, d.sub.2, d.sub.3, and d.sub.4). When the ppOTP data is accessed through the complex space, a path (vector of coordinates) is provided through each of the multiple dimensions. The index coordinates are initially determined using nonce from the RNG [1050], and each path vector may have a fixed or random number of coordinates, indicating positions in the various dimensions. Using this path vector, a set of values can then be calculated from the complex space projected ppOTP, this process being referred to as a vector set calculation [1060]. In this process, data is retrieved from each coordinate specified in the path vector, and then mixed (preferably XORed) with the next piece of data in that path vector at the next coordinate. This walk process is repeated until a final set of values E.sub.1, E.sub.2, etc. are calculated for a corresponding set of vectors, which completes the virtualization into the complex space. Since each vector in the vector path corresponds to a unit of data in the original pOTP (which in turn corresponds to a unit of data in the original plaintext/other data), the resulting values E.sub.1, E.sub.2, . . . E.sub.n can be mixed and then be XORed (or using some other reversible commutative operator) with the original plaintext/other data x.sub.1, x.sub.2, . . . x.sub.n to produce cipher data c.sub.1, c.sub.2, . . . c.sub.n [1070]. Each vector v.sub.n in a vector set s can be created by moving between a given set of dimensions (d.sub.1 . . . d.sub.n) in a random order, using random coordinates in each of those dimensions (without a collision by reusing the coordinates in a particular dimension). Vectors can be of different lengths, reusing a dimension, but preferably not the same coordinate in that dimension. If, when creating the next coordinate in a vector set, there is an attempt to iterate to the next dimension but that exceeds the largest dimension d.sub.n, then one could move to the first dimension in the space (e.g. d.sub.1), or to a random dimension (and use a random coordinate in this dimension that has not been used before).

    [0135] FIG. 11 illustrates a variety of workflows for creating a secure OTP. The preferred workflow [1100] uses preferred security measures, error checking, and randomness extraction at different stages. Workflow A [1110] entangles data before the creation of the final working OTP. Workflow B [1120] performs entanglement even earlier, before partition, and workflow C [1130] performs entanglement earlier before partition. Other permutations and combinations in the workflow are also possible [1140]. In the entanglement process, the resulting xOTPs from different devices are combined by mixing or XORing (or using another reversible/commutative operator) the information from each device in sequence. The xOTPs can be generated using similar methods, or if the partitioning (data is partitioned at different locations in different devices), virtualization (the complex space contains different dimensions in different devices), or another aspect of the xOTPs differs, a process of standardizing the information can take place (where the coordinate locations are mapped to each other using a reproducible process) and information then mixed or XORed after standardizing the coordinates in the xOTPs.

    [0136] Once random data has been generated by or loaded from the RNG source (which may consist of random integer or floating point numbers, which are calculated in firmware/software by calling the appropriate opcode, which in turn generates random bits), the first version of the OTP, the physical OTP (pOTP) is created [1150] by using the random numbers from the RNG to generate random bits. For convenience, the random bits may be organized into units of bits corresponding to the units of information in the original plaintext/other data that is to be encrypted or decrypted. For instance, if the original plaintext was stored in 32-bit units (words), then the pOTP bits would be stored in 32-bit words as well.

    [0137] In each workflow, starting OTP data [1150], which normally consists of a pOTP, is processed using a different operation, such as partitioning, entanglement, virtualization (accessing using complex space virtualization), or another operation(s). Workflows can have different numbers of steps depending on the number of operations performed. These operators could be performed in different sequences and can be skipped and/or repeated. An optional error-checking step [1155] (using randomness extraction/NIST/other standards) is performed on the output from the first operation. This produces different output depending on the workflow, and is considered step 1 [1160]. Then, another operation (partitioning, entanglement, virtualization, etc.) and another optional error-checking operation is performed [1170] to produce the next set of output in step 2. Depending on the workflow, this can result in a vOTP [1180], or virtualized partitioned OTP [1183], or other combinations. Another step (step n [1188]) could be performed, in which another partitioning/entanglement/virtualization operation is completed on the data. In workflow A [1110], this would produce a virtual, entangled OTP (veOTP, or generically referred to as a vOTP [1190]). Finally, another operation is performed [1192] on the OTP data to result in the final working OTP [1194], which can include an eOTP [1196], virtualized, virtualized, entangled OTP (vveOTP, or generically referred to as a vOTP [1199]), or a vOTP or eOTP, among other possibilities.

    [0138] In FIG. 12, the process of encrypting data is described. First, a device (called device 1) contains input data, which input data may relate to confidential information that needs to be securely transmitted to a receiver. The input data may be in the form of plaintext, e-mails, multimedia data, or other information which can be input by users, obtained from sensors, transferred from other electronic devices, or produced/stored by other means. This information is then identified and parsed [1205], and a vOTP is calculated from the original data [1220]. Using the vector paths derived from the index used to access each dimension and data stored/dynamically accessed in the vOTP, OTP values (E.sub.1, E.sub.2, . . . E.sub.n) are then calculated [1230] and mixed and then XORed (or using another commutative operator [1240]) using the equation x⊕E=C (where C refers to the ciphertext, x refers to the original plaintext, and E refers to the mixed OTP values produced by the vOTP) to produce a ciphertext/data corresponding to original plaintext/input information [1250]. This data is then stored and/or can be transmitted to other devices [1255] and includes vector set which acts as a SOWF by indirectly referencing the contents of vOTP.

    [0139] In FIG. 13, the process of decryption is outlined. Output from the encryption process on device 1 [1255] (discussed in FIG. 12) is then used as input for the decryption process on device 2 [1300]. This is transmitted between devices using a method of digital transmission, such as a wired connection (USB, Ethernet, etc.), wireless method, or other means or storage devices. This input is then parsed into units/words of data, and constitutes the ciphertext/data for device 2 [1310]. A vOTP [1320], derived from the eOTP [1315] (which is a shared secret between device 1 and device 2) is then used with the vector set to indirectly access the shared vOTP to reproduce the values E.sub.1, E.sub.2, . . . E.sub.n [1330]. A reversible function is used so in the preferred case of XOR the reciprocal function is also another XOR function. These values are then XORed (or another reversible commutative operation used) [1340] to convert the ciphertext/data back to the original plaintext/input information [1360] according to the equation C⊕E=x, where C is the ciphertext, E are the values calculated from the vOTP, and x is the original plaintext/input information data from device 1. This resulting plaintext/input information can then be saved on device 2, and used as output [1370] for transmission to other devices, processed further, etc.

    [0140] FIGS. 14 and 15 illustrate in pseudocode one possible embodiment of the system, and describe the process of encryption in three main phases: phase 0 (which involves the configuration of hardware and the initial settings for the algorithm), phase 1 (initialization and entanglement of OTPs), and phase 2 (during which data can be accessed, encryption/decryption can take place, as well as certification and authentication). First, various parameters for the encryption process are set including build version [14006], features [14007], and serial number [14008]. Parameters for the basic operations during encryption can also be set, including simple/enhanced encryption [14010], integer size [14011], and index size [14012]. Additionally, OTP parameters can be set concerning the size of the OTP [14014], the number of dimensions [14015], and ranges of values for OTP size [14016], dimensions [14017], entanglement values [14018], and the range of values for encryption [14019]. Then, the OTP is filled with random data using the parameters set previously [14021] using the QRNG to generate truly random data. In phase 1, different types of OTP entanglement can take place, including “enhanced” entanglement [14029] vs. simple entanglement [14030]. First, OTP data is generated for each device [14040, 14041], and then if OTP_MODE is set to “simple” then the given device's OTP is XORed with the OTPs of every other device that it being entangled with. When OTP_MODE is switched to enhanced [14029], a random number of dimensions in the OTP [14037] are then selected for entanglement, then a random master is selected repeatedly [14047] and a portion of the OTP mixed and synced by the selected device until the entire OTP is mixed. Then a random master is selected repeatedly [14057], each choosing a random sized portion of the OTP to be allocated to each dimension in the OTP used for entanglement [14058]. Finally, the information is then synched between devices [14059].

    [0141] In phase 2, information can be encrypted or decrypted simultaneously, and authentication and/or certification can also take place. A create random index function [15068-15070], and a next index function [15072-15078] is provided which allows randomly created indices to be incrementing from the assigned random position within each of the OTP's dimension range's permissible values. Ranges of data in the multidimensional OTP are iterated through using the NEXT_RANGE function [15081-15087] to prevent cryptanalysis or replay attacks. This function finds the next usable range of indices in the OTP for the encryption/decryption process, allocating new ranges [15083] until full and then extending an existing range [15084-15085] until it merges with another range. The basic encryption function is also the decryption function and consists of simply XORing a single value in a given piece of data with OTP data using a given virtual dimension VDIM and virtual index VINDEX [15093]. This function is called repeatedly in the ENCRYPT_TEXT function until the required piece of information is encrypted [15095-15097]. In this function, the PACK operation compresses and cloaks the number and arrangement of each dimension's index bits in the publicly visible index to the minimum [15102] without revealing the number of bits used to index each dimension [15101] shared privately during phase one. This occurs in the function ENCRYPT_MSG [15100] where the ENCRYPT_TEXT function is called [15104]. After a random amount of encryption [15111] the function will start to encrypt a new or extended range within the OTP. The decryption occurs when the DECRYPT_MSG function calls ENCRYPT_TEXT [15110-15111] being its own reciprocal function. Certification of information occurs in CERTIFY function [15114-15118] which calls the ENCRYPT_MSG function [15100]. If OPT_MODE is set to enhanced, ENCRYPT_MSG is called again [15118]. Authentication is performed in a function [15120-15123] where DECRYPT_MSG is used to process a given piece of token text TOKENTEXT. Note that the token text is derived from the OTP data, and there are certain demarcated ranges within the OTP for authentication. Demarcation prevents multiple requests being made for token text which could be used to provide data for cryptanalysis. If OPT_MODE is set to enhanced, then DECRYPT_MSG is called again.

    [0142] FIG. 16 illustrates a computer network utilizing the quantum-safe encryption method in accordance with embodiments of the invention. A device could have disk-based [1600] or USB-based [1610] implementation of the quantum-safe encryption system which then authenticates [1620] with a given computer network [1630]. The computer network consists of quantum-safe communication [1640] between various devices [1650] equipped with software/hardware implementation of the QSE system which can include computers, tablets, phones, or other electronic systems.

    [0143] FIG. 17 illustrates how a computer network/virtual private network (VPN) could be constructed/configured to securely transmit data using computers acting as gateways in a quantum safe manner over any distance, in accordance with embodiments of the present invention. First, a computer network in one location such as Boston, USA [1700] connects to a quantum-safe virtual private network (VPN) gateway [1710] and then can connect through the VPN to the internet/cloud-based resources [1720]. Through the cloud a connection with another quantum-safe VPN in London gateway [1730], UK is established. Through this VPN, communication with a computer network in London [1740] can finally be achieved. Similar schemes can be used to connect to any other computer network in any other location, whether globally or in space (through aircraft/satellite/spacecraft communication).

    [0144] FIG. 18 illustrates one possible simplified authentication process between two (or more) devices, referred to as sender and receiver. It is envisaged that the authentication process may compliment the previously described encryption process. The object of a bilateral authentication process is for the sender to determine if the receiver is in possession of the correct encryption key, generated during the previously described virtualization process. Similarly, the object of a multilateral authentication process is for both sender and receiver to confirm that their opposite party is in possession of the correct encryption key. In accordance with this embodiment, the authentication process consists of exchanging information (packets) between both devices, having a standardized size (e.g. 1 kilobyte). Information may be stored in the packet, and any remaining storage space in the packet that is not used may be padded with random data in an empty slot. The authentication process is initiated by the sender device generating a nonce in step [1800], which has its usual meaning and relates to a piece of random data, preferably generated by a random number generator. The nonce may comprise a small portion of random data, that when encrypted is combined with data from an eOTP associated with one or more coordinates (or equivalently associated with one or more indices) selected by the sender and defined in the complex space. In certain embodiments the data may be combined using for example, an XOR function. In step [1810] the sender encrypts and transmits the following to the receiver: (1) the generated nonce; (2) a request to provide the sender with a confirmation of what the random data (nonce) generated by the sender was; (3) a device ID; and (4) null bits encoding an empty slot of information. In step [1830], the encrypted data is received by the receiver, and decrypted in order to recover the nonce. The receiver can only successfully recover the random data (nonce) when the sender's encryption and receiver's decryption keys match. That is to say that both the receiver and sender's keys relate to the same coordinate, or equivalently indices, in the shared complex space. In this way the receiver is able to recover the random data. In order to complete the unilateral authentication process, the receiver then needs to re-encrypt and communicate the recovered random data (nonce) back to the sender at step [1840]. Upon receipt of the receiver's response, the sender then verifies whether the nonce recovered by the sender is consistent with the nonce transmitted by the sender, at step [1850]. When the receiver's complex space or indices do not match the nonce produced and returned to the sender will be useless random data and the sender's confirmation of the received nonce will fail. A Unilateral authentication is successful when the sender is able to verify the nonce, where the random data recovered by the receiver is consistent with the random data transmitted by the sender. This confirms to the sender that the receiver is in possession of the correct key for the current session, and also is in possession of the secure information required to define the complex space that is known only to the sender and receiver. Where bilateral authentication is required, then the receiver may generate a new random nonce, encrypt and transmit it back to the sender, by doing the following at step [1860]: (1) generate a new nonce; (2) request that the sender provide the receiver with a confirmation of what the new random data (nonce) generated by the receiver was, (3) the destination device ID, and (4) bits that occupy an empty slot in the communication protocol. The sender then recovers the random data (nonce) comprised in the receiver's prepared nonce in the same was as previously done by the receiver in recovering the random data comprised in the sender's nonce, and encrypts and communicates the response to the receiver for authentication. The authentication process prevents replay attacks by requiring encryption on each encrypt and send step [1820], [1850] that encryption uses different complex space indexes (vector path set) and for every encrypt and send step, a different source and destination index.

    [0145] FIG. 19 is a depiction of connectionless communication between multiple devices using a datagram which may contain sequence number, timestamp and lifetime information. Initially, a device, here designated as device x [1900] broadcasts information, containing a broadcast device ID, a random sample of eOTP, and corresponding eOTP index [1910] is encoded, encrypted, and then stored in a datagram for broadcasting/multicasting to other devices [1920]. Each of the devices that are capable of receiving the broadcast/multicast then decrypt the data, and validate the eOTP [1930], [1935], [1940] in the various devices [1950], [1955], [1960]. If the validation is successful, the information from the broadcasting device is accepted and other communication from the broadcasting device can be accepted for usage.

    [0146] FIG. 20 illustrates the logic that governs the authentication process and datagram-mediated communication. Once information has been sent or broadcasted for validation [2000], the validation process, in which data is decrypted, is performed [2010]. If the validation process is successful (or a “pass” [2020]), then the authentication process was successful and data is exchanged between two or more devices [2040]. If the validation process failed [2030], then rather than exchanging actual information between two or more devices, random data from the RNG is passed [2050]. An optional step in the secure encryption process described here is authentication, which involves the creation of a device identity and a simple one way sender identity check of each message sent between sender(s) and receiver(s) or storage device. QSE can be used to secure communication of information during the authentication process. Identities are stored as binary device identities of sufficient length so that there is no chance of collision, and can also include appended binary group identifiers. A set of registers, which can index into portions of a given xOTP(s) of variable length can be used to hold/record/store device and group IDs. In addition to this, a configurable process to load, record, or allocate identity from various possible sources, which can include an xOTP, a QRNG, an external source of random data, or another source of identity can be used to manipulate the authentication data. Additionally, a configurable process to set a particular identity at the time of manufacture, or at the time when devices are being configured when xOTPs are exchanged/entangled, and/or during a specified interval or event (optionally based on elapsed time, volume of encryption or number of connections, expiry time/date, or other factors) is used. To create lists of identifiers, identifiers are created/recorded in a certified list of all other known entangled device IDs/group IDs compiled at the time of entanglement or appended to the list of identifiers when other new device(s) share common portions of the device's xOTPs are entangled. As part of the authentication process, a random number generator should selected and configured, which can be from an internal RNG (which can be a PRNG, QRNG, TRNG, or other source), an xOTP, or an external RNG. The authentication process can also include an optional process to create a source of random numbers by mix/merge/substitute/transpose random numbers including optionally a randomness extractor (which can also perform lossy or lossless compression) such as a von Neumann extractor. During authentication, random nonces can also be used, which can be of arbitrary length and generated from a random number source. A sender will then broadcast its identity over a network or other communication scheme, and during this process, append device ID/group ID to each piece of data being sent before QSE is used to secure the data. The receiver will then check the identity of the device ID/group ID in each piece of data received after QSE, and if there is no match in the list, the data will be optionally discarded.

    [0147] The authentication process can also be expanded to involve more complex methods and approaches, such as two and three way authentication using a device identity (device ID), and/or shared group identity when sent between the sender(s) and receiver(s) using QSE In this process, a sender's challenge process is performed to authenticate the identity (which can include the device ID and/or group ID) of the receiver device(s) to be challenged by sending a QSE message/data containing a challenge key which is the result of an operation (such as an XOR operation) between the identity of the receiving device(s) to be challenged and a random challenge nonce. The receiver's response process, which occurs when the receiver is responding to a sender's challenge message, with a QSE challenge response message/data containing the result of the receiver's device/group identity XORed (or another operator) with the sender's challenge message/data to recover the sender's original random challenge nonce from the sender's challenge key. This is subsequently returned to the sender. The sender's authentication process, which involves receiving the receiver's response message and confirms if the sender's random challenge nonce and the receiver's recovered challenge nonces match (as any other receiver's device/group identity will not recover the senders challenge nonce). In the optional receiver response process, which involves responding to the sender's challenge, the receiver also challenges the sender's device identity. In this process, the receiver's challenge response message also contains/appends a challenge message containing a key being the product (preferably XOR) of the sender's device/group identity to be challenged and a receiver's random challenge nonce. In the sender's challenge response, which involves a reply to a receiver's random challenge message/data with a QSE challenge response message containing the result of the sender's device/group identity XORed (or using another operator) and the receiver's challenge message to recover the receiver's original challenge nonce from the receiver's challenge key which is returned to the receiver. The receiver's authentication process involves receiving the sender's challenge response message/data and confirms if the receiver's original random challenge nonce and the sender's recovered challenge response nonces match (since any other sender's device/group identity will not recover the receiver's challenge nonce). Optionally, during the authentication process, a sender or receiver, challenge or response processes may append an additional arbitrary size random nonce for each challenge and response to increase the effective size of device identity thereby reducing either the possibility of replay attacks or identity collisions caused by similar but incorrect OTPs accidentally responding by chance. Another optional process which can be undertaken during authentication is that sender or receiver, challenge or response processes may use QSE twice or more to encrypt the challenge/response messages thereby hiding the challenge response sequence and further obscuring the sender's/receiver's identity.

    [0148] FIG. 21 illustrates how an optional readout of the OTP in an electronic device would function. A key, which can consist of bits of data of a given length [2110] (for instance, 64, 128, or 256 or more bits) is passed to a main circuit [2100] through a connection. This information is first analyzed by the shift register[2120], which contains a set of random bits programmed at fabrication time by another RNG on a separate device which is part of the manufacturing process. The shift register performs a comparison [2130] of the key to the serial security key [2140] programmed into the hardware. If the comparison results in a match [2170], then the firmware [2172], CPU [2174], and RAM [2176] produce the pOTP data [2185], which is then passed to a mixer [2190] before transmitting the data to another device [2195]. If the comparison of the key to the serial security key does not match [2160], then this results in the RNG generating random data [2180] which is then passed to the mixer [2190], and then this random data is randomly transmitted to another device [2195]. Although the figure illustrates serial processing of the readout key, an alternative embodiment allows parallel loading and processing of the readout key and OTP.

    [0149] Referring to FIG. 22, overall the invention can consist of different embodiments, where each embodiment can comprise a server [2200], client [2210], or intermediate [2220], which can interact with each other or themselves. Each embodied in many different combinations of software and hardware, with predominantly software implementation being one end of the spectrum [2230], and predominantly hardware on the other end [2280]. Logic blocks in software running on a general-purpose computer, such as in a desktop application or mobile app [2240] is an example of a predominantly software implementation. Dedicated logic hardware in highly integrated circuit designs (some of these implementations in increasing order of miniaturization are discussed below (all require random number generators)), such as with hardware implementations [2260], are examples of predominantly hardware implementations. Simple applications running on personal computers require only each has a source of random information (preferably TRNG/QRNG) [2230]. The personal computers initially should ideally be connected together in an isolated environment and since the personal computers share resources, however when in use, the applications may become vulnerable to attack. A software only implementation may be used with cellular phones, where the software and OTP memory are located in a Trusted Execution Environment (TEE) to protect the encryption software and OTP from attack. Another implementation takes the non-volatile flash OTP memory and a small microprocessor and places all the hardware and software logic into a removable device such as a USB key used by a personal computer [2250]. Only the removable devices need be isolated and the separate physical nature of the device prevents inspection of the OTP memory or other internal state information increasing physical security while reducing the vulnerability to attack. Another implementation takes the majority of software logic and places those parts in hardware logic, such as shift registers, address registers and banks of non-volatile memory [2260]. When dedicated FPGA (field programmable gate arrays) and ASIC/VLSI (very large scale integrated) circuits are used [2270], mass production is possible at low cost with very lower power consumption while the added miniaturization prevents inspection or probing of the internal state or OTP greatly improving physical security.

    [0150] FIG. 23 illustrates a graphical representation of a complex space [2300] and an unstructured random walk with N=100 and n=9. By refreshing the initial key string, the path taken in the first walk set (red [2310]) is not followed when the second set (blue [2320]) intersects with it.

    [0151] FIG. 24 illustrates a graph of the function of the probability of collision with a randomly selected set G breaking a set of S elements in a relatively small complex space of 10.sup.19 elements (using a log-scale of probabilities) [2400], or the probability of a successful crib P.sub.Crib. When G has fewer than 10 elements, the probability is zero. Since no odd number of elements can cancel out an even number, and vice versa, this results in a striated pattern in the function where probability periodically oscillates between an ever vanishingly small value and zero probability. Larger complex spaces exhibit probabilities of collision approach but do not quite reach the Shannon Limit of Information so collisions may never occur in practice.

    [0152] Typical applications of this system are in mobile cellular phones, telephony and communications including television and radio broadcasts, network devices such as gateways, routers, firewalls and VPN, personal computers, general purpose servers, file servers, web servers, database servers and other systems or electronic devices. A further implementation takes highly integrated circuits and places them in identity devices such as RFID, remote sensing and identity devices like credit cards, identity cards, passports to allow authentication of identity. Extremely low power versions of the implementation are possible, enabling operation with low power or transient power sources such as electro/electromagnetic/magnetic field, solar, or electro/static/voltaic sources, like bi-metallic, aircell, chemical battery, piezo or curie effect. Very low power implementations with the encryption logic designed in hardware gates and registers requires little or no programming. Consequently, the speed and latency of operation is fast, fixed and predictable or with low jitter, required for precise timing of highly synchronized processed such as cellular phone signaling, financial transactions and ledgers where accurate precision timing is used to arbitrate access to resources or records. Time division of resources with long operational life in decades makes the implementation suitable for both terrestrial and satellite communications. A final implementation example takes a version of the highly-integrated logic/circuit design and provides a hardware logic library (like Verilog or VHDL) to enable inclusion into the hardware of a microprocessor or similar devices. The library allows the adaptation of a general-purpose processors such as the ARM processor so a quantum encryption engine can be added to a provide a specialized single chip solution. Ultimately the encryption engine implementation may be included as a standard feature of any electronic processor/CPU.

    APPENDIX—MATHEMATICAL MODELLING

    [0153] The embodiments of the invention are comprise a method in which large random bit strings (herein referred to as vectors) are created from an original random vector derived from a true random number generator, such as a quantum random number generator. The algorithm uses OTPs which are information theoretic secure, as well as secure key reuse that is combinatorically secure. This appendix will outline key properties of the methods in accordance with embodiments of the invention, including: (1) the preservation of optimal randomness: mixing vector data, when derived from a uniformly random distribution, preserves the properties of the distribution. (2) ensuring that there is no key repetition during the virtualization procedure of the algorithm, using a seeded set selection technique and a bound on virtualization, (3) how attempts to compromise encryption through the biasing of set selection will not be successful (with reasonable assumptions), (4) the probability that an attacker could gain access to insecure message text given a certain amount of intercepted ciphertext produced in a combinatorially secure way, and that this probability is unphysically (when using reasonable parameters).

    [0154] Here we will examine the XOR function and its ability to preserve randomness, and show how it can function as a mixing function. The truth table for the XOR function can be defined in equation 2:

    [00001] a b = c a b c 1 1 0 1 0 1 0 1 1 0 0 0 Equation 2

    when calculating the result of the XOR function, the variables a and b are binary vectors of length ρ (i.e. A, B∈{0,1}.sup.n). The result of an XOR function between the two vectors can be defined as the bitwise operation between the i.sup.th element of vector A and the i.sup.th element of vector B, to produce another binary vector of length ρ.

    [0155] To illustrate that the XOR operation preserves randomness, consider a fixed vector F, which can be defined as F∈{0,1}.sup.ρ and another vector R which is chosen from a uniformly random distribution (derived from a true random number generator or some other means) where the probability of each individual binary element in the vector 2.sup.ρ can be defined as 2.sup.−ρ. The result of XORing the vectors F and R can be defined as O, such that:


    O=F⊕R   (Equation 3)

    [0156] We can define the probability that O assumes an arbitrary value as follows:


    P(O=Arbitrary)   (Equation 4)


    which is then defined as


    =P(F⊕R=Arbitrary)   (Equation 5)


    which is then equivalent to


    =P(R=F⊕Arbitrary)   (Equation 6)

    [0157] This can be stated because of the following relationships:


    1)O=Acustom-characterA=[0].sup.ρ  (Equation 7)


    2){O}.sup.ρ⊕A=A  (Equation 8)


    A∈{0,1}.sup.ρ  (Equation 9)

    [0158] Hence, the probability of the vector O assumes a specific value is equivalent to the probability of R assumes a specific value. As a result, the following can be asserted:


    P(O=Arbitrary)=P(R=F⊕Arbitrary)=2.sup.−ρ   (Equation 10)

    since all of the values of R are equiprobable by definition. Hence, the distribution of values of a given vector combined with another vector of values with a uniformly random distribution using the XOR operation will be a random distribution of values as well (assuming that the two input vectors are independent). This observation can be extended to a set of n vectors, such can then be combined using a series of XOR operations in the following fashion:


    O=R⊕A.sub.1⊕A.sub.2⊕A.sub.3 . . . ⊕A.sub.n   (Equation 11)

    where A.sub.m is an arbitrary value. We can then define:


    F=A.sub.1⊕A.sub.2⊕A.sub.3 . . . ⊕A.sub.n   (Equation 12)

    hence for a given number of vectors n combined using the XOR operator, if at least one vector is of a random distribution, the final result will also be of a random distribution.

    [0159] Having establishing that vector combinations from a uniformly random distribution of values can constitute a valid source of new random vector data, a method of selecting sets of information securely must be established. In the encryption algorithm, random vector information which constitutes an OTP is “virtualized” or transformed into a “complex space” which can consist of hyperdimensional space, a network, graph, vector space, or other space as defined previously. The complex space has a coordinate system associated with it, and subsets of the space need to be selected so that no information is revealed about the final or initial key. The initial key is used to guide the selection of subsets in a deterministic fashion. This process will allow one or more parties with the initial key to reconstruct the same final key, used for encrypting the message, which is much larger.

    [0160] For instance, consider a complex space with N entries, and each entry consists of a p length vector that is generated using a true random number generator, like a quantum random number generator. The unique index for each location, stored in m bits, can be defined using the following equation:


    m=Log.sub.2(N)   (Equation 13)

    [0161] The walk is initiated by storing the location of the first m bits of a key in a temporary set. The entry to the next location is then provided by XORing the m bits of the initial key with the first m bits of the entry. The product of the XOR operation will produce a result that is of a uniformly random distribution as discussed in section 1.

    [0162] This process is repeated at new locations in the complex space, with each entry added to the temporary stored set, until the set contains n desired elements. Then, the resulting n p vectors are XORed together resulting in p bits of the final key. The temporary set is then cleared and the portion of the final key is stored. Then, m bits are discarded from the initial key, and subsequently m bits are retrieved to be processed in the same fashion. During this process, the refresh rate for generating the initial key can be changed to correspond to the appropriate key generation rate.

    [0163] When selecting a set of n items, the probability of selecting that set can be expressed as the product of the probabilities of selecting each individual item:


    P.sub.set=Π.sub.iP.sub.i   (Equation 14)

    [0164] The probability of selecting each item can be described as

    [00002] P i = 1 2 m ,

    as each of the m bits obey a uniformly random distribution. The selection of each item is therefore equiprobable, so each set is trivially equiprobable and can be described as:

    [00003] P set = 1 ( N n ) ( Equation 15 )

    [0165] This method provides access to all possible subsets within the complex space equally, and the method of subset selection results in no structure in the final key. It is important to note, however, that the set of all chosen subsets has a uniformly random distribution in numerical values, since any two subsets with a nonzero union can be described as having a higher probability of equality compared to two disjoint subsets. This is because the union will have overlap (see FIG. 23).

    [0166] If we define a complex space of N elements, with a given precision ρ (which can also be referred to as “bit depth”), and a general subset of n elements (n<N), a structure less random walk can be described in the following fashion. We need to define two spaces, a “bit space” and “combination space”. The definition of the “bit space” is a space containing all possible binary vectors of length ρ, and the size of the space is specified by 2.sup.ρ. The “combination space” contains all possible combinations of n elements contained in an N-dimensional complex space. This has a multiplicity defined by a binomial coefficient (without repetition):

    [00004] ( N n ) = N ! n ! ( N - n ) ! ( Equation 16 )

    [0167] Since the XOR operator is commutative, unordered combinations should be considered rather than ordered permutations. If the combination space size exceeds the bit space size, then this results in multiple combinations of n elements (from N) which when combined result in the same key. As an example, if we have a list consisting of 10 4-bit strings, then this results in 220 possible ways to select various subsets of 3 elements with replacement. The corresponding dimension of the bit space is 2.sup.4=16, and the 16 possible strings are produced on the average, 220/16=13.75 distinct subsets. Hence, certain vectors will occur more likely than other vectors in a complex space. We can define an expectation value which expresses the number of sets which lead to a specific vector as:

    [00005] v = ( N n ) 2 ρ ( Equation 17 )

    which applies to all possible vectors, and selecting certain values for n and ρ can result in:

    [00006] ( N n ) 2 ρ ( Equation 18 )

    yielding an expectation within a given complex space of one set per string with size ρ bits.

    [0168] There are constraints on this process, including physical memory requirements and time to perform multiple XOR operations. With regard to physical memory, the total amount of memory that needs to be used is related to the number of bits that need to be stored at a given time in the complex space, and as well as the locations of temporary sets, with the physical memory (a reasonable physical memory limit might be 10.sup.10 bits) P being defined as:


    N.Math.ρ+n.Math.log.sub.2(N)≈P   (Equation 19)

    [0169] Additionally, to combine n elements, n.Math.ρ bitwise XOR operations need to be performed. If we define the time to perform an XOR operation as tau, then the time to produce a single bit of key n can be defined as:


    T=n.Math.τ   (Equation 20)

    [0170] Hence, if n is very large, the bitrate reduces. For the remainder of this discussion, r will be assumed to be small enough to render this an insignificant problem. While the combination space can be maximized when n=N/2, this may be difficult to implement practically. In order to impart a combinatorial advantage, we need the combinatorial space to be larger than N, such that:

    [00007] N ( N n ) 2 ρ ( Equation 21 )

    [0171] A realistic example can be now developed considering the memory and time/bitrate constraints discussed above. If we allocate 1 GB of storage (10.sup.10 bits) filled with vectors with N=10.sup.6 and a depth of ρ=10.sup.4. We can define the combination space with n=861 as:

    [00008] ( 10 6 861 ) 10 3010 ( Equation 22 )

    [0172] And the bit space has a size defined as:


    2.sup.10.sup.4≈10.sup.3010   (Equation 23)

    [0173] This describes an approximate equivalence between bit space and the combination space. This can be recalculated if sets are recorded and eliminated while running, which would yield about 10.sup.4*10.sup.3010=10.sup.3014 bits of key available, an astronomical value which completely dwarfs all known data storage capacity. A key growth expansion factor, which needs to be defined due to the requirement of refreshing the initial key, can be defined as:

    [00009] K ^ = ρ j .Math. log 2 ( N ) ( Equation 24 )

    [0174] With the value j defined as the number of refreshes per set, and j=1 yields a factor of 500 bits of final key per bit of initial key.

    [0175] The above discussion has shown that spatial distributions of selected subsets in within complex space can be described as uniformly random. However, the values in each subset, namely the XOR product of all elements, may not be numerically uniformly distributed, since some complex space subsets have nonzero unions, which are always equal. While the XOR product of all of the elements in a single subset creates a random value which is treated as a uniformly random event, the probability of a “collision” (or two selected subsets producing the same value) depends on the size of the union. As a result, the keys used are not maximally entropic, resulting in some reuse in the protocol. This can be demonstrated in the following example which involves a complex space with two entries, denoted A and B. A scheme where all of the combinations are used can be expressed as follows:


    A⊕M.sub.1=C.sub.1  (Equation 25a)


    B⊕M.sub.2=C.sub.2  (Equation 25b)


    A⊕B⊕M.sub.3=C.sub.3  (Equation 25c)

    [0176] An attacker can gain access to an XORed data using a brute force attack without the presence of a key, which is susceptible to frequency analysis:


    C.sub.1⊕C.sub.2⊕C.sub.3=A⊕M.sub.1⊕B⊕M.sub.2⊕(A⊕B⊕M.sub.3)=M.sub.1⊕M.sub.2⊕M.sub.3   (Equation 26)

    [0177] The combinations of ciphertext remain secure if there is one string of unknown key data, with one string of maximally entropic key data sufficient to secure the data against crib drag, brute force attack, frequency analysis, and other cryptanalysis methods. To determine the probability that an attacker or some external person could access or decrypt XORed data that is susceptible to frequency analysis, we need to calculate the probability that combinations of compromised ciphertext will completely cancel the key present in another compromised ciphertext.

    [0178] To address this problem, we assume that the key can be drawn with equal probability from all sets of complex space elements (i.e. using a structure less random walk). With this assumption, we can count the number of possible multisets G of size |G| (where repetition is allowed in G) of complex space elements that cancel out a set of size |S| (with no repetition allowed in S). S is a set of complex space elements that represent the XOR product that produced a key for ciphertext that was intercepted. G represents the set that consists of the XOR product of multiple keys of other intercepted ciphertexts. This is a larger set of XORed complex space elements that allows for repetition.

    [0179] To allow for frequency analysis, two conditions need to be fulfilled for a set G to cancel out a set S. The first condition specifies that every element of S must be contained in G an odd number of times. This condition ensures that the final product of the XOR operation does not contain elements contained in S. In the second condition, each element in the complex space that is not in S must be contained in G zero times or an even number of times. This ensures that no new complex space elements are introduced when S is XORed with G. This problem can be represented in the following fashion: an integer can be assigned to each location within a complex space such that each integer represents the number of times that a location appears in G. If we define the size of a complex space as |H|, the ordered sum of |S| odd integers, and the ordered sum of |H|−|S| even (or zero) integers that sum to |G| represent a unique, unordered set G. This set G cancels some set S.

    [0180] Using these principles, we can define the number of integer constructions, or the number of ordered integer sums that equal a particular value. Odd integer constructions of k elements that add to n are expressed as:

    [00010] ( n - k 2 + k - 1 n - k 2 ) ( Equation 27 )

    [0181] For

    [00011] n - k 2

    an integer, and zero if otherwise. We can then express number of even integer (including zero) constructions of n with k elements as:

    [00012] ( n 2 + k - 1 n 2 ) ( Equation 28 )

    [0182] For n even, and zero if otherwise. Hence, the total sets G that will cancel out a set S is defined as follows:

    [00013] .Math. n = .Math. "\[LeftBracketingBar]" s .Math. "\[RightBracketingBar]" .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" ( n - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" 2 + .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" - 1 n - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" 2 ) .Math. ( .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" - n 2 + .Math. "\[LeftBracketingBar]" H .Math. "\[RightBracketingBar]" - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" - 1 .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" - n 2 ) ( Equation 29 )

    and all fractional expressions are integers, or else the term does not contribute. This can be expressed as a probability by dividing the sum terms by total possibilities, |H| multichoose |G|:

    [00014] P cancel = .Math. n = .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" ( n - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" 2 + .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" - 1 n - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" 2 ) .Math. ( .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" - n 2 + .Math. "\[LeftBracketingBar]" H .Math. "\[RightBracketingBar]" - .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" - 1 .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" - n 2 ) .Math. "\[LeftBracketingBar]" H .Math. "\[RightBracketingBar]" + .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" - 1 .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" ( Equation 30 )

    [0183] Using numerical modelling one can calculate reasonable values for the complex space. From the plot FIG. 24, the probabilities of guessing a successful set vanish rapidly as G increases in value (in this instance a complex space of a googol (10.sup.100) in size is used because of the limited precision m the mathematical libraries used to model). Using this relationship, the amount of ciphertext that needs to be intercepted for a break to occur can be calculated. If an attacker intercepts discrete packets of ρ bits of ciphertext, the total number of access attempts is 2.sup.C with the number of intercepted ciphertexts being C (that have p bits of message data XORed with the same amount of a final key which are generated from a set of complex space elements), which is the total number of unordered sets chosen from C elements. The number of attempts to pick a cipher-breaking set is approximated as 1 over the leading probability term. If intercepted ciphertexts are in packets of trivial size S=10, then the allowed value for |G| is i.Math.|S|, with i being an integer. If we assume that i=1 is forbidden, then the leading term can be expressed as P.sub.break(|G|=2.Math.|S|) where i=2. From these relationships, the next term when i=3 is several times less likely, compared to i=2.

    [0184] To determine how much ciphertext can be sent in this fashion with the assumption that not a single breaking set is even is more complicated to determine: C packets of intercepted ciphertext results in a number of unordered sets of size i given by

    [00015] ( C i ) .

    Hence a breaking set of i.Math.|S| elements is available when

    [00016] ( C i ) .Math. P break ( .Math. "\[LeftBracketingBar]" G .Math. "\[RightBracketingBar]" = i .Math. .Math. "\[LeftBracketingBar]" S .Math. "\[RightBracketingBar]" ) 1

    for some value i. For modest values of C, P.sub.break dominates, and i=2 is maximal, but as C increases this is no longer necessarily true as the function

    [00017] ( C i )

    outpaces P.sub.break with an increase in i.