BACKGROUND

Cryptographic techniques may be used to protect communication systems. For instance, encryption techniques based on symmetric cryptography and asymmetric cryptography may be used to protect confidentiality, while signature techniques based on asymmetric cryptography, as well as hashing techniques, may be used to protect integrity.

Symmetric cryptography may be less computationally intensive than asymmetric cryptography, and therefore may be more suitable for applications that operate in resource-constrained environments (e.g., mobile device, Internet-of-Things devices, etc.) and/or have high performance expectations (e.g., real time audio/video streaming). However, symmetric cryptography may become vulnerable to cryptanalysis attacks if the same symmetric key is repeatedly used to encrypt messages. For instance, by capturing and analyzing ciphertext from different messages, an attacker may be able to detect patterns and recover some or all of the corresponding plaintext.

SUMMARY

Some embodiments are directed to at least one non-transitory computer-readable storage medium storing processor-executable instructions that, when executed by at least one device, cause the at least one device to perform a method of encryption. The method comprises selecting a first operation from a plurality of operations, each of the plurality of operations associated with a respective type of data to be encrypted; generating first data to be encrypted at least in part by performing the first operation; encrypting both information identifying the first operation and the first data to obtain corresponding first ciphertext; and outputting the first ciphertext.

Some embodiments are directed to a method of encryption, the method comprising using at least one processor to perform: selecting a first operation from a plurality of operations, each of the plurality of operations associated with a respective type of data to be encrypted; generating first data to be encrypted at least in part by performing the first operation; encrypting both information identifying the first operation and the first data to obtain corresponding first ciphertext; and outputting the first ciphertext.

Some embodiments are directed to a system, the system comprising at least one processor and at least one non-transitory computer-readable storage medium storing processor-executable instructions that, when executed by the at least one processor, cause the at least one processor to perform a method of encryption. The method comprises selecting a first operation from a plurality of operations, each of the plurality of operations associated with a respective type of data to be encrypted; generating first data to be encrypted at least in part by performing the first operation; encrypting both information identifying the first operation and the first data to obtain corresponding first ciphertext; and outputting the first ciphertext.

In some embodiments, each operation of the plurality of operations is associated with a respective probability of a plurality of probabilities, and selecting the first operation comprises: selecting the first operation from the plurality of operations using the plurality of probabilities.

In some embodiments, the plurality of operations includes an operation for obtaining at least a portion of an input message to be output, an operation for obtaining a salt value, and an operation for changing the state of the at least one device.

In some embodiments, the first operation is an operation for changing the state of the at least one device, and performing the first operation causes at least one parameter in the state of the at least one device to be updated.

In some embodiments, the method comprises using a software program to perform the selecting, generating, encrypting and outputting acts, and wherein executing the first operation causes at least one parameter in the state of the software program to be updated.

In some embodiments, encrypting the first data is performed using an encryption module having at least one parameter, and performing the first operation causes at least one parameter of the encryption module to be updated.

In some embodiments, performing the first operation comprises changing at least one probability for selecting an operation from the plurality of operations.

In some embodiments, generating the first data comprises generating information indicating at least one update to the at least one parameter in the state of the at least one device, and encrypting the first data comprises encrypting the information indicating the at least one update to the at least one parameter.

In some embodiments, when the first operation is an operation for obtaining a salt value, generating the first data comprises obtaining a first salt value, and encrypting the first data comprises encrypting the first salt value.

In some embodiments, obtaining the first salt value comprises determining a target length of the salt using one or more sources of randomness; and generating, as the first salt value, a value having the target length using the one or more sources of randomness.

In some embodiments, the one or more sources of randomness include information associated with one or more of the plurality of operations previously performed by the at least one computing device.

In some embodiments, when the first operation is an operation for obtaining at least a part of input data to be encrypted, generating the first data comprises obtaining a first portion of an input message to be transmitted; and encrypting the first data comprises encrypting the first portion of the input message.

In some embodiments, encrypting the first data comprises encrypting the first data using a block cipher, a stream cipher, a substitution cipher, a polyalphabetic cipher, a public key encryption algorithm, and/or a symmetric-key encryption algorithm.

In some embodiments, the at least one parameter of the encryption module comprises a symmetric key, an initialization vector for a block cipher, an initialization vector for a stream cipher, and/or a substitution alphabet for a polyalphabetic cipher.

In some embodiments, encrypting the first data comprises encrypting the first data using a randomized partitioned permutation cipher.

In some embodiments, the randomized partitioned permutation cipher is associated with a plurality of languages including a first language; and after outputting the first ciphertext and before selecting a second operation from the plurality of operations, the method further comprises selecting a second language from the plurality of languages.

In some embodiments, the state of the encryption module includes one or more parameters specifying a permutation of a set of ciphertext symbols and one or more parameters specifying a partition of the permutation.

In some embodiments, updating the at least one parameter using at least one random value obtained from one or more sources of randomness.

In some embodiments, the method further comprises: transforming the first data after it is generated to obtain transformed first data, and encrypting the first data comprises encrypting the transformed first data.

In some embodiments, transforming the first data is performed using one or more random values obtained using one or more sources of randomness.

In some embodiments, the method further comprises transforming the first ciphertext to obtained transformed ciphertext, and transmitting the first ciphertext comprises transmitting the transformed ciphertext.

In some embodiments, outputting the first ciphertext comprises transmitting the first ciphertext to an another device via a communication channel. In some embodiments, outputting the first ciphertext comprises storing the first ciphertext in a memory.

Some embodiments are directed to a method for decrypting received ciphertext at a decryption device, the method comprising using the decryption device to perform: obtaining a first ciphertext; decrypting the first ciphertext to obtain corresponding first plaintext; identifying, from the first plaintext, a first operation of a plurality of operations, wherein the first operation is an operation for changing a state of the decryption device; and performing the first operation to change the state of the decryption device.

Some embodiments are directed to a system comprising at least one processor and at least one non-transitory computer-readable storage medium storing instructions that, when executed by the at least one processor, cause the at least one processor to perform a method for decrypting received ciphertext at a decryption device, the method comprising using the decryption device to perform: obtaining a first ciphertext; decrypting the first ciphertext to obtain corresponding first plaintext; identifying, from the first plaintext, a first operation of a plurality of operations, wherein the first operation is an operation for changing a state of the decryption device; and performing the first operation to change the state of the decryption device.

Some embodiments are directed to at least one non-transitory computer-readable storage medium storing instructions that, when executed by at least one processor, cause the at least one processor to perform a method for decrypting received ciphertext at a decryption device, the method comprising using the decryption device to perform: obtaining a first ciphertext; decrypting the first ciphertext to obtain corresponding first plaintext; identifying, from the first plaintext, a first operation of a plurality of operations, wherein the first operation is an operation for changing a state of the decryption device; and performing the first operation to change the state of the decryption device.

In some embodiments, the method for decrypting comprises using a software program including a decryption module to perform the obtaining, decrypting, identifying, and performing, and wherein performing the first operation comprises changing at least one value of at least one parameter of a decryption module using information in the first plaintext.

In some embodiments, the method for decrypting further comprises using the decryption device to perform: identifying, from the first plaintext, a second operation of the plurality of operations, wherein the second operation is an operation for obtaining a portion of an input message to be transmitted, and wherein performing the first operation comprises obtaining the portion of the input message from the first plaintext.

Some embodiments are directed to a method for encrypting input data using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises using at least one processor to perform: obtaining, from the input data, a first plaintext symbol; mapping the first plaintext symbol to a first ciphertext symbol using the cipher, the mapping comprising: identifying a first set of candidate ciphertext symbols using the first plaintext symbol, the first permutation, and the first partition; and identifying, at random, the first ciphertext symbol from the first set of candidate ciphertext symbols; and outputting the first ciphertext symbol.

Some embodiments are directed to at least one non-transitory computer-readable storage medium storing processor-executable instructions that, when executed by at least one computing device, cause the at least one computing device to perform a method for encrypting input data using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises using at least one processor to perform: obtaining, from the input data, a first plaintext symbol; mapping the first plaintext symbol to a first ciphertext symbol using the cipher, the mapping comprising: identifying a first set of candidate ciphertext symbols using the first plaintext symbol, the first permutation, and the first partition; and identifying, at random, the first ciphertext symbol from the first set of candidate ciphertext symbols; and outputting the first ciphertext symbol.

Some embodiments are directed to a system, comprising at least one computer hardware processor; and at least one non-transitory computer-readable storage medium storing processor-executable instructions that, when executed by at least one computing device, cause the at least one computing device to perform a method for encrypting input data using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises using the at least one processor to perform: obtaining, from the input data, a first plaintext symbol; mapping the first plaintext symbol to a first ciphertext symbol using the cipher, the mapping comprising: identifying a first set of candidate ciphertext symbols using the first plaintext symbol, the first permutation, and the first partition; and identifying, at random, the first ciphertext symbol from the first set of candidate ciphertext symbols; and outputting the first ciphertext symbol.

In some embodiments, the method comprises: selecting the first language from the plurality of languages before mapping the first plaintext symbol to the first ciphertext symbol.

In some embodiments, selecting the first language comprises: generating the first permutation for the first set using one or more sources of randomness; and generating the first partition for the first permutation.

In some embodiments, generating the first partition for the first permutation comprises: identifying a set of active ciphertext symbols among the first set of ciphertext symbols; and identifying, as the first partition, multiple mutually disjoint proper subsets of the set of active ciphertext symbols, wherein the multiple proper subsets cover the set of active ciphertext symbols. In some embodiments, selecting the first language further comprises: generating a first decryption vector using the first permutation and the first partition.

In some embodiments, the method comprises: using the decryption vector, mapping the first ciphertext symbol to the first plaintext symbol; and outputting the first plaintext symbol.

In some embodiments, the first partition comprises multiple mutually disjoint proper subsets of the first set of ciphertext symbols, and wherein each of the multiple proper subsets contains a same number of ciphertext symbols.

In some embodiments, the first partition comprises multiple mutually disjoint proper subsets of the first set of ciphertext symbols, and wherein at least two of the multiple proper subsets contain a different number of ciphertext symbols.

In some embodiments, the plurality of languages includes a second language associated with the first set of ciphertext symbols, a second permutation for the first set and different from the first permutation, and a second partition for the first permutation, the method further comprising: obtaining, from the input data, a second plaintext symbol; mapping the second plaintext symbol to a second ciphertext symbol using the randomized partitioned permutation cipher, the mapping comprising: identifying a second set of candidate ciphertext symbols using the second plaintext symbol, the second permutation, and the second partition; identifying, at random, the second ciphertext symbol randomly from the second set of candidate ciphertext symbols; and outputting the second ciphertext symbol.

In some embodiments, after outputting the first ciphertext symbol and before mapping the second plaintext symbol to a second ciphertext symbol, the method further comprising selecting the second language from the plurality of languages.

In some embodiments, outputting the first ciphertext symbol comprises transmitting the first ciphertext symbol to another device using a communication channel. In some embodiments, outputting the first ciphertext symbol comprises storing the first ciphertext symbol.

In some embodiments, the method comprises: when using the first language for mapping plaintext symbols to respective ciphertext symbols, mapping each of the plaintext symbols, including the first plaintext symbol, to respective ciphertext symbols only in a proper subset of the first set of ciphertext symbols.

Some embodiments are directed to a method for decrypting encrypted data, the encrypted data encrypted using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises: obtaining, from the encrypted data, a first ciphertext symbol; obtaining a first decryption vector for the first language; mapping the first ciphertext symbol to a first plaintext symbol using the first decryption vector; and outputting the first plaintext symbol.

Some embodiments are directed to a system comprising at least one processor and at least one non-transitory computer-readable storage medium storing instructions that, when executed by the at least one processor, cause the at least one processor to perform a method for decrypting encrypted data, the encrypted data encrypted using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises: obtaining, from the encrypted data, a first ciphertext symbol; obtaining a first decryption vector for the first language; mapping the first ciphertext symbol to a first plaintext symbol using the first decryption vector; and outputting the first plaintext symbol.

Some embodiments are directed to at least one non-transitory computer-readable storage medium storing instructions that, when executed by at least one processor, cause the at least one processor to perform a method for decrypting encrypted data, the encrypted data encrypted using a cipher associated with a plurality of languages including a first language, the first language associated with a first set of ciphertext symbols, a first permutation for the first set, and a first partition for the first permutation. The method comprises: obtaining, from the encrypted data, a first ciphertext symbol; obtaining a first decryption vector for the first language; mapping the first ciphertext symbol to a first plaintext symbol using the first decryption vector; and outputting the first plaintext symbol.

In some embodiments the method for decrypting encrypted data further includes: identifying a subset of active ciphertext symbols among the first set of ciphertext symbols; and detecting tampering at least in part by determining whether the first ciphertext symbol is in the active subset.

The foregoing is a non-limiting summary of the invention, which is defined by the attached claims.

