Patent ID: 6948067

Claim:
A method for encrypting and authenticating data as a single entity, comprising: arranging data into a plurality of plaintext blocks, each sized according to a cipher block size; specifying at least one cleartext position for which at least one ciphertext block will be the same as a corresponding plaintext block; determining a plurality of noise blocks using a nonce value and a first key; determining a plurality of intermediate ciphertext blocks, wherein the first intermediate ciphertext block corresponds to an encryption of the nonce, and the remaining intermediate ciphertexts are determined by: for each of the plurality of plaintext blocks specified by a cleartext position, combining the plaintext block with a corresponding noise block; and for each of the plurality of plaintext blocks not specified by a cleartext position, forming an intermediate plaintext block using the plaintext block and a preceding intermediate ciphertext block and then encrypting the intermediate plaintext block using a second key; determining a plurality of ciphertext blocks, wherein the plurality of ciphertext blocks are determined by: setting the first ciphertext block equal to the first intermediate ciphertext block; setting each of the ciphertext blocks specified by a cleartext position equal to a corresponding plaintext block; and determining each of the remaining ciphertext blocks by combining a corresponding intermediate ciphertext block with a corresponding noise block; determining a plurality of authentication blocks, wherein the plurality of authentication blocks are determined by: if an authentication block is associated with a plaintext block that is not specified by a cleartext position, then setting the authentication block equal to the plaintext block; if an authentication block is associated with a plaintext block that is specified by a cleartext position, then determining the authentication block by decrypting an associated intermediate ciphertext block and combining the decrypted associated intermediate ciphertext block with a preceding intermediate ciphertext block; computing an authentication tag by combining all of the plurality of authentication blocks with a noise block and then encrypting the combined result; and appending the authentication tag to the plurality of ciphertext blocks.