Computer-implemented method and computer program product for end-to-end data integrity protection (implementing opportunistic authentication of encrypted data)
By compressing and encrypting data with a MAC, the method addresses the lack of data integrity protection in LPC, ensuring secure and efficient data deduplication in storage systems.
Patent Information
- Application Number
- JP2021196598
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2020-12-03
- Filing Date
- 2021-12-03
- Publication Date
- 2025-12-23
- Estimated Expiration
- 2041-12-03
AI Technical Summary
Current implementations of length-preserving compression (LPC) do not provide data integrity protection for encrypted data, which is crucial for identifying and removing duplicates in data storage systems.
A method involving compressing data, encrypting it if it meets a size threshold, creating a message authentication code (MAC), and appending it to the encrypted data, or discarding and encrypting uncompressed data if it exceeds the threshold, ensuring a formatted string is produced.
This approach ensures end-to-end data integrity protection and allows for efficient data deduplication by creating a deterministic ciphertext string, optimizing storage space and maintaining data security.
Smart Images

Figure 0007790828000001 
Figure 0007790828000002 
Figure 0007790828000003
Abstract
Description
[Technical Field]
[0001] The present invention relates to data security, and more particularly, the present invention relates to implementing end-to-end data integrity protection using message authentication codes (MACs). [Background technology]
[0002] A useful way to implement data integrity protection is through the use of message authentication codes (MACs). For example, MACs may be used to verify the authenticity and integrity of received data. Deterministic encryption is also useful in data storage, as it allows for the identification and removal of duplicates of encrypted data within the data storage. Deterministic encryption can be combined with length-preserving compression (LPC) to enable storage systems to perform data deduplication on data that has already been persistently encrypted at the host. However, current LPC implementations do not implement data integrity protection. Summary of the Invention [Problem to be solved by the invention]
[0003] Accordingly, the present invention provides a computer-implemented method and computer program product for end-to-end data integrity protection. [Means for solving the problem]
[0004] A computer-implemented method according to one embodiment includes compressing an uncompressed instance of data to create a compressed instance of data; encrypting the compressed instance of data in response to determining that the size of the compressed instance of data is less than a predetermined threshold; creating a message authentication code (MAC) for the encrypted compressed instance of data; and zero-padding and appending the MAC to the compressed instance of encrypted data to create a formatted string.
[0005] According to another embodiment, a computer program product includes one or more computer-readable storage media and program instructions collectively stored on the one or more computer-readable storage media, the program instructions including instructions configured to cause one or more processors to perform a method including: the processor compressing an uncompressed instance of data to create a compressed instance of data; the processor encrypting the compressed instance of data in response to determining that a size of the compressed instance of data is less than a predetermined threshold; the processor creating a message authentication code (MAC) for the encrypted compressed instance of data; and the processor zero-padding and appending the MAC to the compressed instance of encrypted data to create a formatted string.
[0006] According to another embodiment, a computer-implemented method includes compressing an uncompressed instance of data to create a compressed instance of data; in response to determining that the size of the compressed instance of data is less than a predetermined threshold, encrypting the compressed instance of data, creating a message authentication code (MAC) for the encrypted compressed instance of data, and zero-padding and appending the MAC to the encrypted compressed instance of data to create a formatted string; and in response to determining that the size of the compressed instance of data is greater than the predetermined threshold, discarding the compressed instance of data and encrypting the uncompressed instance of data to create the formatted string.
[0007] Other aspects and embodiments of the present invention will become apparent from the following detailed description, taken in conjunction with the drawings, illustrating by way of example the principles of the invention. [Brief explanation of the drawings]
[0008] [Figure 1] FIG. 1 illustrates a cloud computing environment according to one embodiment of the present invention. [Figure 2] FIG. 2 illustrates abstract model layers according to one embodiment of the present invention. [Figure 3] FIG. 2 illustrates a cloud computing node according to one embodiment of the present invention. [Figure 4] 1 illustrates a hierarchical data storage system according to one embodiment of the present invention. [Figure 5] 1 is a flowchart illustrating a method for implementing opportunistic authentication of encrypted data, according to one embodiment of the present invention. [Figure 6] 3 is a flowchart illustrating a method for encrypting an uncompressed instance of data, according to one embodiment of the present invention. [Figure 7] 1 is a flowchart illustrating a method for encrypting and opportunistically authenticating an instance of data according to one embodiment of the present invention. [Figure 8] 1 is a flowchart illustrating a method for performing data deduplication, according to one embodiment of the present invention. [Figure 9] FIG. 1 illustrates an exemplary environment for performing wide block encryption of compressed instances of plaintext, according to one embodiment of the present invention. [Figure 10] FIG. 1 illustrates an exemplary environment for performing wide block encryption of an uncompressed instance of plaintext, according to one embodiment of the present invention. DETAILED DESCRIPTION OF THE INVENTION
[0009] The following description is set forth for the purpose of illustrating the general principles of the present invention and is not intended to limit the inventive concepts claimed herein. Furthermore, particular features described herein can be used in combination with other described features in each of the various possible combinations and permutations.
[0010] Unless otherwise defined herein, all terms are to be given the broadest possible interpretation of the term, including the meaning implied from this specification and the meaning understood by those skilled in the art and / or defined in dictionaries, treatises, etc.
[0011] It should also be noted that, as used in this specification and the appended claims, the singular forms "a," "an," and "the" include plural referents unless expressly stated otherwise. It will also be understood that the terms "comprise" and / or "comprising," when used herein, specify the presence of stated features, integers, steps, operations, elements, or components, or combinations thereof, but do not exclude the presence or addition of one or more other features, integers, steps, operations, elements, components, or groups or combinations thereof.
[0012] The following description discloses several embodiments that implement opportunistic authentication of encrypted data.
[0013] In one general embodiment, a computer-implemented method includes compressing an uncompressed instance of data to create a compressed instance of data; encrypting the compressed instance of data in response to determining that the size of the compressed instance of data is less than a predetermined threshold; creating a message authentication code (MAC) for the encrypted compressed instance of data; and zero-padding and appending the MAC to the compressed instance of encrypted data to create a formatted string.
[0014] In another general embodiment, a computer program product includes one or more computer-readable storage media and program instructions collectively stored on the one or more computer-readable storage media, the program instructions including instructions configured to cause one or more processors to perform a method including: the processor compressing an uncompressed instance of data to create a compressed instance of data; the processor encrypting the compressed instance of data in response to determining that a size of the compressed instance of data is less than a predetermined threshold; the processor creating a message authentication code (MAC) for the encrypted compressed instance of data; and the processor zero-padding and appending the MAC to the compressed instance of the encrypted data to create a formatted string.
[0015] In another general embodiment, a computer-implemented method includes compressing an uncompressed instance of data to create a compressed instance of data; in response to determining that the size of the compressed instance of data is less than a predetermined threshold, encrypting the compressed instance of data, creating a message authentication code (MAC) for the encrypted compressed instance of data, and zero-padding and appending the MAC to the encrypted compressed instance of data to create a formatted string; and in response to determining that the size of the compressed instance of data is greater than the predetermined threshold, discarding the compressed instance of data and encrypting the uncompressed instance of data to create the formatted string.
[0016] Although this disclosure includes detailed descriptions of cloud computing, it should be understood that implementation of the teachings described herein is not limited to cloud computing environments. On the contrary, embodiments of the present invention may be implemented in conjunction with any other type of computing environment now known or later developed.
[0017] Cloud computing is a service delivery model that enables convenient, on-demand network access to a shared pool of configurable computing resources (e.g., networks, network bandwidth, servers, processing, memory, storage, applications, virtual machines, and services) that can be rapidly provisioned and released with minimal administrative effort or interaction with a service provider. This cloud model can include at least five characteristics, at least three service models, and at least four deployment models.
[0018] The features are as follows:
[0019] On-Demand Self-Service: Cloud consumers can unilaterally provision computing capabilities such as server time and network storage automatically as needed without the need for human interaction with the service provider.
[0020] Wide network access: Functionality is available over the network and can be accessed through standard mechanisms that facilitate use by heterogeneous thin-client or thick-client platforms (e.g., mobile phones, laptops, and PDAs).
[0021] Resource Pooling: To accommodate multiple consumers using a multi-tenant model, a provider's computing resources are pooled, with different physical and virtual resources dynamically allocated and reallocated according to demand. Consumers generally have no control over or knowledge of the exact location of the resources provided, but there is a sense of location independence in that they may be able to specify a higher level of abstraction (e.g., country, state, or data center).
[0022] Rapid Elasticity: Capabilities can be provisioned quickly and elastically, sometimes automatically, to quickly scale out, and capabilities can be released quickly and quickly scale in. To the consumer, the capabilities available for provisioning often appear infinite, and they can purchase as many as they want, at any time.
[0023] Metered Services: Cloud systems automatically control and optimize resource utilization by utilizing metering capabilities at some level of abstraction appropriate for the type of service (e.g., storage, processing, bandwidth, and active user accounts). Resource usage can be monitored, controlled, and reported, providing transparency to both providers and consumers of utilized services.
[0024] The service model is as follows:
[0025] Software as a Service (SaaS): The functionality offered to the consumer is the use of the provider's applications running on a cloud infrastructure. The applications are accessible from a variety of client devices through thin-client interfaces such as web browsers (e.g., web-based email). The consumer does not manage or control the underlying cloud infrastructure, including the network, servers, operating systems, storage, or even individual application functions, with the possible exception of limited user-specific application configuration settings.
[0026] Platform as a Service (PaaS): The capability offered to consumers is the deployment of consumer-created or acquired applications, written using programming languages and tools supported by the provider, on a cloud infrastructure. The consumer does not manage or control the underlying cloud infrastructure, including the network, servers, operating systems, or storage, but does have control over the deployed applications and, in some cases, the application hosting environment configuration.
[0027] Infrastructure as a Service (IaaS): The capability offered to consumers is the provisioning of processing, storage, network, and other basic computing resources onto which they can deploy and run any software, which may include operating systems and applications. The consumer does not manage or control the underlying cloud infrastructure, but does have control over the operating system, storage, and deployed applications, and may have limited control over selected networking components (e.g., host firewalls).
[0028] The deployment models are as follows:
[0029] Private Cloud: This cloud infrastructure is operated solely for the organization. It can be managed by the organization or a third party and can reside on-premise or off-premise.
[0030] Community Cloud: This cloud infrastructure is shared by several organizations and supports a specific community with common concerns (e.g., mission, security requirements, policies, and compliance concerns). It can be managed by the organization or a third party and can reside on-premises or off-premises.
[0031] Public Cloud: This cloud infrastructure is available to the public or large industry organizations and is owned by an organization that sells cloud services.
[0032] Hybrid Cloud: This cloud infrastructure is a composite of two or more clouds (private, community, or public) that remain their own entities but are joined by standardized or proprietary technologies that enable data and application portability (e.g., cloud bursting for load balancing between clouds).
[0033] Cloud computing environments are service-oriented, focusing on statelessness, loose coupling, modularity, and semantic interoperability. At the heart of cloud computing is an infrastructure that includes a network of interconnected nodes.
[0034] Referring now to FIG. 1, an exemplary cloud computing environment 50 is illustrated. As shown, the cloud computing environment 50 includes one or more cloud computing nodes 10 with which local computing devices used by cloud consumers, such as a personal digital assistant (PDA) or mobile phone 54A, a desktop computer 54B, a laptop computer 54C, or an automotive computer system 54N, or any combination thereof, can communicate. The nodes 10 can communicate with each other. The nodes 10 may be physically or virtually grouped (not shown) in one or more networks, such as the private cloud, community cloud, public cloud, or hybrid cloud, or any combination thereof, described above. This enables the cloud computing environment 50 to provide infrastructure, platform, and / or software as a service for which the cloud consumer does not need to maintain resources on their local computing device. It should be noted that the types of computing devices 54A-54N shown in FIG. 1 are intended to be illustrative only, and it is understood that computing node 10 and cloud computing environment 50 may communicate with any type of computerized device via any type of network connection or network-addressable connection, or combination thereof, (e.g., using a web browser).
[0035] Referring now to Figure 2, a set of functional abstraction layers provided by cloud computing environment 50 (Figure 1) is shown. It should be understood in advance that the components, layers, and functions shown in Figure 2 are intended to be illustrative only, and embodiments of the present invention are not limited thereto. As shown, the following layers and corresponding functions are provided:
[0036] Hardware and software layer 60 includes hardware and software components, such as mainframe 61, reduced instruction set computer (RISC) architecture-based servers 62, servers 63, blade servers 64, storage devices 65, and network and networking components 66. In some embodiments, software components include network application server software 67 and database software 68.
[0037] The virtualization layer 70 provides an abstraction layer that can instantiate virtual entities such as: virtual servers 71, virtual storage 72, virtual networks including virtual private networks 73, virtual applications and operating systems 74, and virtual clients 75.
[0038] In one example, the management layer 80 may provide the following functions: Resource provisioning 81 dynamically procures computing and other resources utilized to execute tasks within the cloud computing environment; Metering and pricing 82 tracks costs as resources are utilized within the cloud computing environment and bills or invoices for the consumption of these resources. In one example, these resources may include application software licenses; Security verifies the identity of cloud consumers and tasks and protects data and other resources; User portal 83 provides consumers and system administrators with access to the cloud computing environment; Service level management 84 allocates and manages cloud computing resources to ensure required service levels are met; and Service level agreement (SLA) planning and fulfillment 85 proactively negotiates and procures cloud computing resources for anticipated future demand in accordance with SLAs.
[0039] The workload layer 90 provides examples of functions that can utilize a cloud computing environment. Examples of workloads and functions that can be provided from this layer include mapping and navigation 91, software development and lifecycle management 92, virtual classroom instruction delivery 93, data analytics processing 94, transaction processing 95, and message authentication 96.
[0040] Referring now to Figure 3, a schematic diagram of an example cloud computing node is shown. Cloud computing node 10 is merely one example of a suitable cloud computing node and is not intended to suggest any limitation as to the scope of use or functionality of the embodiments of the present invention described herein. In any event, cloud computing node 10 is capable of implementing and / or performing any of the functions described above.
[0041] Cloud computing node 10 includes computer system / server 12 that is operable with numerous other general-purpose or special-purpose computing system environments or configurations. Examples of known computing systems, environments, or configurations, or combinations thereof, that are adaptable for use with computer system / server 12 include, but are not limited to, personal computer systems, server computer systems, thin clients, thick clients, handheld or laptop devices, multiprocessor systems, microprocessor-based systems, set-top boxes, programmable consumer electronics devices, network PCs, minicomputer systems, mainframe computer systems, and distributed cloud computing environments that include any of the above systems or devices.
[0042] Computer system / server 12 may be described in the general context of computer system-executable instructions, such as program modules, executed by a computer system. Generally, program modules may include routines, programs, objects, components, logic, data structures, etc. that perform particular tasks or implement particular abstract data types. Computer system / server 12 may also be practiced in distributed cloud computing environments where tasks are performed by remote processing devices linked through a communications network. In a distributed cloud computing environment, program modules may be located in both local and remote computer system storage media, including memory storage devices.
[0043] 3, computer system / server 12 in cloud computing node 10 is shown in the form of a general-purpose computing device. Components of computer system / server 12 may include, but are not limited to, one or more processors or processing units 16, system memory 28, and bus 18 connecting various system components, including system memory 28, to processor 16.
[0044] Bus 18 may represent one or more of any of several types of bus structures, including a memory bus or memory controller, a peripheral bus, an accelerated graphics port, and a processor bus or local bus using any of a variety of bus architectures, including, by way of example only, an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, and a Peripheral Component Interconnect (PCI) bus.
[0045] Computer system / server 12 typically includes a variety of computer system-readable media, which may be any available media that can be accessed by computer system / server 12 and includes both volatile and nonvolatile media, removable and non-removable media.
[0046] System memory 28 may include computer system-readable media in the form of volatile memory, such as random access memory (RAM) 30 and / or cache memory 32. Computer system / server 12 may further include other removable / non-removable, volatile / non-volatile computer system storage media. By way of example only, storage system 34 may be provided for reading from and writing to non-removable, non-volatile magnetic media (not shown, commonly referred to as a "hard drive"). Although not shown, a magnetic disk drive may be provided for reading from and writing to removable, non-volatile magnetic disks (e.g., "floppy disks"), and an optical disk drive may be provided for reading from and writing to removable, non-volatile optical disks, such as CD-ROMs, DVD-ROMs, or other optical media. In such cases, each may be connected to bus 18 by one or more data media interfaces. As further illustrated and described below, memory 28 may include at least one program product having a set (e.g., at least one) program module configured to implement the functions of embodiments of the present invention.
[0047] By way of example, and not limitation, a program / utility 40 having a set (e.g., at least one) program module 42, an operating system, one or more application programs, other program modules, and program data may be stored in memory 28. Each of the operating system, one or more application programs, other program modules, and program data, or any combination thereof, may comprise an implementation of a networking environment. The program modules 42 generally perform the functions and / or methods of embodiments of the present invention described herein.
[0048] The computer system / server 12 may also communicate with one or more external devices 14, such as a keyboard, pointing device, display 24, or one or more devices that allow a user to interact with the computer system / server 12, or any device (e.g., a network card, modem, etc.) that allows the computer system / server 12 to communicate with one or more other computing devices, or a combination thereof. Such communication may occur via an input / output (I / O) interface 22. Additionally, the computer system / server 12 may communicate with one or more networks, such as a local area network (LAN), a general wide area network (WAN), or a public network (e.g., the Internet), or a combination thereof, via a network adapter 20. As shown, the network adapter 20 communicates with other components of the computer system / server 12 via a bus 18. Note that, although not shown, other hardware and / or software components may also be used with the computer system / server 12. Examples include, but are not limited to, microcode, device drivers, redundant processing units, external disk drive arrays, RAID systems, tape drives, and data archive storage systems.
[0049] Referring now to FIG. 4, a storage system 400 is shown according to one embodiment. Note that some of the elements shown in FIG. 4 may be implemented as hardware, software, or both, according to various embodiments. The storage system 400 may include a storage system manager 412 for communicating with multiple media on at least one upper storage tier 402 and at least one lower storage tier 406. The upper storage tier 402 may preferably include one or more random access media 404 and / or direct access media 404, such as hard disks in a hard disk drive (HDD), non-volatile memory (NVM), solid state memory in a solid state drive (SSD), flash memory, SSD arrays, flash memory arrays, or other media described herein or known in the art, or a combination thereof. The lower storage tier 406 may preferably include one or more lower performance storage media 408, including sequential access media such as magnetic tape in a tape drive and / or optical media, slow access HDDs, slow access SSDs, etc., or other media described herein or known in the art, or any combination thereof. One or more additional storage tiers 416 may include any combination of storage and memory media, as desired by the designer of the system 400. Also, either the upper storage tier 402 or the lower storage tier 406 or both may include some combination of storage devices and / or storage media.
[0050] Storage system manager 412 can communicate with storage media 404, 408 on upper storage tier 402 and lower storage tier 406 via network 410, such as a storage area network (SAN) or some other suitable type of network as shown in FIG. 4. Storage system manager 412 can also communicate with one or more host systems (not shown) via host interface 414, which may or may not be part of storage system manager 412. Storage system manager 412, and / or any other components of storage system 400, can be implemented in hardware and / or software and may use a processor (not shown), such as a central processing unit (CPU), field programmable gate array (FPGA), application specific integrated circuit (ASIC), or the like, to execute commands of a type known in the art. Of course, any configuration of storage system can be used, as would be apparent to one of ordinary skill in the art after reading this description.
[0051] In further embodiments, storage system 400 may include any number of data storage tiers, each containing the same or different storage media. For example, each data storage tier may contain the same type of storage media, such as HDDs, SSDs, sequential access media (e.g., tape in a tape drive, optical disk in an optical disk drive), direct access media (e.g., CD-ROM, DVD-ROM), or any combination of media storage types. In one such configuration, upper storage tier 402 may contain a majority of SSD storage media for storage of data in a higher performance storage environment, while the remaining storage tiers, including lower storage tier 406 and additional storage tier 416, may contain any combination of SSDs, HDDs, tape drives, etc. for storage of data in a lower performance storage environment. In this manner, more frequently accessed data, higher priority data, data requiring faster access, etc. may be stored in upper storage tier 402, while data that does not possess one of these attributes may be stored in lower storage tier 406 or additional storage tier 416. Of course, those skilled in the art, after reading this description, will be able to devise many other combinations of storage media types to implement different storage schemes in accordance with the embodiments presented herein.
[0052] In some embodiments, a storage system (e.g., 400) may include logic configured to receive a request to open a data set; logic configured to determine whether the requested data set is stored in multiple associated portions in a lower storage tier 406 of the hierarchical data storage system 400; logic configured to move each associated portion of the requested data set to an upper storage tier 402 of the hierarchical data storage system 400; and logic configured to assemble the requested data set from the associated portions onto the upper storage tier 402 of the hierarchical data storage system 400.
[0053] Of course, this logic may be implemented as a method or computer program product on any device and / or system according to various embodiments.
[0054] Referring now to Figure 5, there is shown a flowchart of a method 500 according to one embodiment. Method 500 may be performed in accordance with the present invention in a variety of environments, particularly any of the environments shown in Figures 1-4 and 9-10. Of course, those skilled in the art will recognize from reading this description that method 500 may include more or fewer operations than those specifically set forth in Figure 5.
[0055] Each of the steps of method 500 can be performed by any suitable component of an operating environment. For example, in various embodiments, method 500 may be performed in part or in whole by one or more servers, computers, or any other device having one or more processors therein. A processor, e.g., a processing circuit, chip, or module implemented in hardware and / or software, preferably having at least one hardware component, or a combination thereof, may be used in any device to perform one or more steps of method 500. Exemplary processors include, but are not limited to, a central processing unit (CPU), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or the like, combinations thereof, or any other suitable computing device known in the art. Other exemplary components include one or more co-processors or accelerators, which may or may not be on the same chip as the CPU, or which may or may not be packaged on the same substrate or module.
[0056] 5, method 500 may begin at operation 502, where an uncompressed instance of data is compressed to create a compressed instance of the data. In one embodiment, the uncompressed instance of the data may be compressed using one or more compression algorithms to create a compressed instance of the data. For example, a compression algorithm may be applied to the uncompressed instance of the data to create the compressed instance of the data.
[0057] Also, in one embodiment, the uncompressed instance of data may include data identified as being encrypted. For example, a request to encrypt the uncompressed instance of data may be received from an application, a user, etc. In another embodiment, the uncompressed instance of data may include a plaintext instance.
[0058] Alternatively, method 500 may proceed to operation 504, where, in response to determining that the size of the compressed instance of the data is less than a predetermined threshold, the compressed instance of the data is encrypted. In one embodiment, the size of the compressed instance of the data may be compared to a predetermined threshold. In another embodiment, the predetermined threshold may include a threshold data size. In yet another embodiment, in response to determining that the size of the compressed instance of the data is greater than the predetermined threshold, the compressed instance of the data may be discarded, deleted, or removed.
[0059] For example, a compressed instance of data may be discarded and overwritten by subsequent compression engine output. The discarded data may then be deleted in response to a determination that no more data is arriving or a detected or imminent loss of power.
[0060] In one embodiment, the predetermined threshold may include a sum of the sizes of the length field, a predetermined minimum zero pad length, and a message authentication code (MAC) field. For example, the length field, the predetermined zero pad, and the message authentication code (MAC) field may each have a predetermined size. In another embodiment, encryption of the compressed instance of data results in an encrypted compressed instance of data.
[0061] Also, in one embodiment, the compressed instance of the data may be encrypted using a wide block cipher. For example, encrypting the compressed instance of the data using a wide block cipher may include applying a wide block cipher algorithm to the compressed instance of the data. In another example, the wide block cipher algorithm may include an EME2-AES encryption algorithm, an XCB-AES encryption algorithm, or the like.
[0062] Additionally, in one embodiment, the wide block encryption algorithm may function as a single block cipher and take the compressed instance of data as input. In another embodiment, the wide block encryption algorithm may internally use a narrow block cipher (e.g., the Advanced Encryption Standard (AES) cipher) while encrypting the compressed instance of data. In yet another embodiment, the wide block encryption algorithm may output an encrypted compressed instance of data. In yet another embodiment, encrypting the compressed instance of data using the wide block cipher may include applying the wide block encryption algorithm to the compressed instance of data.
[0063] Also, in one embodiment, the compressed instance of data may be encrypted using an uncompressed encryption mode (e.g., counter mode encryption) that includes an initialization vector. For example, the initialization vector may be created using the compressed instance of data and a secret key. In another example, the secret key may include an instance of data used for encryption that is not publicly known (e.g., held by the entity encrypting the instance of data). In yet another example, the secret key may also be referred to as a private key.
[0064] Additionally, in one embodiment, the initialization vector may include a keyed hash. In another embodiment, the keyed hash is the result of applying a hash function to the private key and the compressed instance of the data. In yet another embodiment, the hash function may be applied to the private key and plaintext in any order (e.g., first to the private key and second to the compressed instance of the data, or first to the compressed instance of the data and second to the private key).
[0065] Also, in one embodiment, the hash function may map a secret key and a compressed instance of the data to a fixed-size hash value that constitutes a keyed hash. In another embodiment, the hash function may include the Secure Hash Algorithm-256 (SHA-256) cryptographic hash function. In yet another embodiment, the initialization vector may include the calculation of a keyed-hash message authentication code / hash-based message authentication code (HMAC) involving the hashing key and the plaintext. In another aspect, the hashing key may be the same as the secret key used to encrypt the data or may be related to that secret key by key derivation, and the keyed hash may be calculated using an encryption algorithm.
[0066] Furthermore, in one embodiment, a key for hashing may be derived from a secret key, and the keyed hash may be calculated using an encryption algorithm. For example, the keyed hash may be obtained by encrypting a hash of the plaintext with a hash encryption key. The hash encryption key is a type of hashing key and may therefore be the same as the secret key used to encrypt the data, or may be related to the secret key by key derivation. When using a hash encryption key, the encryption algorithm used may be as simple as the Electronic Codebook (ECB) mode of the Advanced Encryption Standard (AES) encryption algorithm using a 128-bit key (i.e., ECB-AES-128). In another aspect, the hashing key may be generated independently of the secret key, in which case it would need to be retained so that it can be used with the secret key for further encryption under the same key to enable data deduplication. The independently generated hashing key contributes to the uniqueness of the initialization vector (IV). The independently generated hashing key would also need to be retained if the IV needs to be checked when comparing the plaintext resulting from decrypting the ciphertext created using the IV.
[0067] Also, in one embodiment, the compressed instance of the data may be encrypted using the initialization vector, the secret key, and the compressed instance of the data. For example, encryption of the compressed instance of the data results in an encrypted compressed instance of the data. In another example, encryption of the compressed instance of the data may include applying an encryption mode (e.g., an encryption algorithm) to the compressed instance of the data using the initialization vector and the secret key.
[0068] Additionally, in one embodiment, the encryption mode may include an encryption mode that relies on a nonce or IV, such as CBC, PCBC, CFB, OFB, OCB, CTR, CCM, or GCM. For example, a counter-based encryption mode (e.g., CTR, GCM, etc.) may combine an initialization vector with an arbitrary counter value to create a first value. That first value may then be incremented to create a count stream of as long as necessary. A secret key may then be used to perform a block cipher encryption (e.g., Advanced Encryption Standard (AES) encryption) on that count stream to create a cipher stream. This instance of data may then be combined with the cipher stream (e.g., using an exclusive OR (XOR) operation) to create an encrypted instance of the data.
[0069] Also, in one embodiment, the encryption mode may include a Galois Counter Mode (GCM) encryption mode. For example, the GCM encryption mode may determine the number of blocks in a compressed instance of data. In another example, the number of blocks may be combined with an initialization vector to create a first value. The first value may then be incremented to create a count stream of as long as necessary. A secret key may then be used to perform a block cipher encryption (e.g., Advanced Encryption Standard (AES) encryption) on the count stream to create a cipher stream. This instance of data may then be combined with the cipher stream (e.g., using an XOR operation) to create an encrypted instance of the data.
[0070] Additionally, in one embodiment, the condensed instance of encrypted data may include an instance of ciphertext (eg, ciphertext resulting from applying an encryption algorithm to the condensed instance of data).
[0071] Further, method 500 may proceed to operation 506, where a message authentication code (MAC) is created for the compressed instance of the encrypted data. In one embodiment, the MAC may include data used to authenticate the compressed instance of the encrypted data after it is transmitted to a recipient. In another embodiment, the MAC may be both generated and verified using the same secret key. In yet another embodiment, a key generation algorithm may select a secret key (e.g., randomly) from a key space.
[0072] Also, in one embodiment, a key generation algorithm may select a predetermined private key. In another embodiment, a signing algorithm may output a tag (e.g., a MAC) given the selected private key and a compressed instance of the encrypted data as input. In yet another embodiment, a verification algorithm may use the tag and the selected private key to accept or reject a message (e.g., a ciphertext string) that includes the compressed instance of the encrypted data and the tag.
[0073] In this way, the MAC can be used to verify the authenticity of a compressed instance of encrypted data.
[0074] Additionally, in one embodiment, the MAC may comprise a Galois Message Authentication Code (GMAC or GCM-MAC) created as part of a GCM encryption mode. For example, a compressed instance of data may be encrypted using the GCM encryption mode, and the MAC may be created as part of the same encryption computation (e.g., using the same secret key, etc.).
[0075] Also, in one embodiment, the MAC may comprise a keyed-hash message authentication code or a hash-based message authentication code (e.g., HMAC). For example, the HMAC may be created based on an underlying cryptographic hash function (e.g., a SHA2-256 or SHA3-256 hash function). In another example, two passes of hash calculation may be used to create the HMAC.
[0076] For example, a private key may calculate two keys (an inner key and an outer key) from a compressed instance of the encrypted data. In another embodiment, a first pass of a cryptographic hash function may use the compressed instance of the encrypted data and the inner key to generate the inner hash. In yet another embodiment, a second pass of a cryptographic hash function may use the inner hash and the outer key to generate the final HMAC.
[0077] Further, method 500 may proceed to operation 508, where a zero pad and a MAC are appended to the compressed instance of encrypted data to create a formatted string. In one embodiment, a length field may be appended to the compressed instance of encrypted data, and the length field may include a field having a predetermined length (e.g., 2 bytes) indicating the length of the compressed instance of encrypted data. In another embodiment, the length of the compressed instance of encrypted data may be determined and this length may be encoded in a length field concatenated to the compressed instance of encrypted data.
[0078] In another embodiment, the size of the length field may be calculated based on the size of the compressed instance of the encrypted data. In one embodiment, the HMAC may be calculated after one or more of the length field and zero padding are appended to the compressed instance of the encrypted data.
[0079] Also, in one embodiment, the minimum zero pad may include a predetermined minimum number of bytes having some highly compressible and easily detectable value, such as all bytes set to zero. In another embodiment, the zero pad may have a length greater than a predetermined threshold. For example, the predetermined threshold may include a variable number of bytes having a minimum length. In yet another embodiment, the zero pad may be concatenated to a compressed instance of the encrypted data, a length field, or the like.
[0080] Additionally, in one embodiment, the MAC may include a field having a predetermined length. In another embodiment, the MAC may be concatenated to a compressed instance of the encrypted data, a length field, zero-padded, etc. In yet another embodiment, the length of the ciphertext string (e.g., the length of the length field, compressed instance of the encrypted data, zero-padded, and MAC) may be equal to the length of the uncompressed instance of the data. In yet another embodiment, if the compressed instance of the data is encrypted using an initialization vector (IV), the IV may be concatenated to the compressed instance of the encrypted data, a length field, zero-padded, MAC, etc.
[0081] Also, in one embodiment, the lengths of the length field, compressed instance of encrypted data, zero pad, MAC, and IV may be equal to the length of the uncompressed instance of data. In this manner, length preserving compression (LPC) may be implemented while compressing, encrypting, and integrity protecting the instance of data.
[0082] Additionally, in one embodiment, the formatted string may be stored and / or transmitted. For example, the formatted string may be stored in a database, a distributed storage system, a cloud computing environment, etc. In another embodiment, the formatted string may be transmitted over one or more networks to one or more users, one or more devices, one or more remote storage systems, etc.
[0083] Additionally, in one embodiment, zero padding may be used to identify a compressed instance of encrypted data (e.g., in response to receiving a compressed instance of encrypted data or retrieving a compressed instance of encrypted data from storage). For example, upon receiving a formatted string, the receiving entity may search the string for zero padding (e.g., at a predetermined location within the ciphertext string). In another example, if zero padding is identified, the formatted string may be identified as a compressed instance of encrypted data. In yet another example, if zero padding is not identified, the formatted string may be identified as an uncompressed instance of encrypted data.
[0084] Additionally, in one embodiment, a MAC can be used to verify data integrity and authenticity of a ciphertext string. For example, a MAC may be extracted from a ciphertext string upon receipt of the ciphertext string. For example, the location of the MAC within the ciphertext string may be provided to the receiver and used to extract the MAC. In another example, a verification algorithm (with a secret key) may determine the MAC using the ciphertext string and the secret key (e.g., the secret key used to create the MAC).
[0085] Also, in one embodiment, the determined MAC may be compared to the extracted MAC. In another embodiment, if the determined MAC is the same as the extracted MAC, the ciphertext may be determined to be valid. In yet another embodiment, if the determined MAC is not the same as the extracted MAC, the ciphertext may be rejected as invalid.
[0086] In this manner, a fully deterministic ciphertext string for an instance of data can be created and stored. This ciphertext string is fully deterministic in that if a first instance of data is the same as a second instance of data and the first key is the same as the second key, then a first ciphertext string created for the first instance of data using the first key can be identical to a second ciphertext string created for the second instance of data using the second key, using the wide block encryption technique described above. As a result, duplicate ciphertext strings can be identified and removed within the hardware storage, thereby increasing available storage space within the hardware storage, improving hardware storage performance, and maintaining the security of the stored data through robust encryption.
[0087] Additionally, including a MAC in the ciphertext string allows the ciphertext string to be checked for corruption upon receipt (e.g., due to transmission errors, malware, etc.), thereby providing end-to-end integrity protection for the ciphertext string during storage and transmission.
[0088] Referring now to Figure 6, a flowchart of a method 600 for encrypting an uncompressed instance of data is shown, according to one embodiment. Method 600 may be performed in accordance with the present invention in a variety of environments, particularly any of the environments shown in Figures 1-4 and 9-10. Of course, those skilled in the art will recognize from reading this description that method 600 may include more or fewer operations than those specifically set forth in Figure 6.
[0089] Each of the steps of method 600 can be performed by any suitable component of an operating environment. For example, in various embodiments, method 600 may be performed in part or in whole by one or more servers, computers, or any other device having one or more processors therein. A processor, e.g., a processing circuit, chip, or module implemented in hardware and / or software, preferably having at least one hardware component, or a combination thereof, may be used in any device to perform one or more steps of method 600. Exemplary processors include, but are not limited to, a central processing unit (CPU), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or the like, combinations thereof, or any other suitable computing device known in the art. Other exemplary components include one or more co-processors or accelerators, which may or may not be on the same chip as the CPU, or which may or may not be packaged on the same substrate or module.
[0090] 6, method 600 may begin at operation 602, where it is determined that the size of a compressed instance of data is greater than a predetermined threshold. In one embodiment, the uncompressed instance of data may include data identified as being encrypted. For example, a request to encrypt the uncompressed instance of data may be received from an application, a user, etc.
[0091] Additionally, in one embodiment, the uncompressed instance of the data may include an instance of plaintext. For example, the plaintext may include unencrypted information that is desirably encrypted using one or more encryption algorithms. In another embodiment, the uncompressed instance of the data may be compressed using one or more compression algorithms to create a compressed instance of the data.
[0092] Also, in one embodiment, the size of the compressed instance of data may be compared to a predetermined threshold. In another embodiment, the predetermined threshold may include a threshold data size. In yet another embodiment, the predetermined threshold may include room for the length field plus a predetermined minimum zero pad length. In yet another embodiment, in response to determining that the size of the compressed instance of data is greater than the predetermined threshold, the compressed instance of data may be discarded (e.g., removed, deleted, etc.).
[0093] Further, method 600 may proceed to operation 604, where the uncompressed instance of the data is encrypted to create a ciphertext string without first compressing the uncompressed instance of the data. In one embodiment, the encryption of the uncompressed instance of the data results in an encrypted uncompressed instance of the data. In another embodiment, the encrypted uncompressed instance of the data may have the same size / length as the uncompressed instance of the data.
[0094] Additionally, in one embodiment, the uncompressed instance of the data may be encrypted using Advanced Encryption Standard (AES) encryption. In another embodiment, the uncompressed instance of the data may be encrypted using wide block encryption. For example, encrypting the uncompressed instance of the data using wide block encryption may include applying a wide block encryption algorithm to the uncompressed instance of the data.
[0095] Additionally, in one embodiment, the wide block encryption algorithm may include an EME2-AES encryption algorithm, an XCB-AES encryption algorithm, etc. In another embodiment, the wide block encryption algorithm may function as a single block cipher and take an uncompressed instance of data as input. In yet another embodiment, the wide block encryption algorithm may internally use a narrow block cipher (e.g., an Advanced Encryption Standard (AES) cipher) while encrypting the uncompressed instance of data.
[0096] Additionally, in one embodiment, the wide block encryption algorithm may output an uncompressed instance of encrypted data, while in another embodiment, the uncompressed instance of encrypted data may include an instance of ciphertext (e.g., ciphertext resulting from applying an encryption algorithm to an uncompressed instance of plaintext).
[0097] Additionally, in one embodiment, the ciphertext string may be stored and / or transmitted. For example, the ciphertext string may be stored in a database, a distributed storage system, a cloud computing environment, etc. In another example, the ciphertext string may be transmitted over one or more networks to one or more users, one or more devices, one or more remote storage systems, etc.
[0098] Referring now to Figure 7, there is shown a flowchart of a method 700 for encrypting and opportunistically authenticating an instance of data, according to one embodiment. Method 700 may be performed in accordance with the present invention in a variety of environments, particularly any of the environments shown in Figures 1-4 and 9-10. Of course, those skilled in the art will recognize from reading this description that method 700 may include more or fewer operations than those specifically set forth in Figure 7.
[0099] Each of the steps of method 700 can be performed by any suitable component of an operating environment. For example, in various embodiments, method 700 may be performed in part or in whole by one or more servers, computers, or any other device having one or more processors therein. A processor, e.g., a processing circuit, chip, or module implemented in hardware or software, or both, preferably having at least one hardware component, or a combination thereof, may be used in any device to perform one or more steps of method 700. Exemplary processors include, but are not limited to, a central processing unit (CPU), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or the like, combinations thereof, or any other suitable computing device known in the art. Other exemplary components include one or more coprocessors or accelerators, which may or may not be on the same chip as the CPU, or which may or may not be packaged on the same substrate or module.
[0100] 7, method 700 may begin at operation 702, where an uncompressed instance of data is compressed to create a compressed instance of the data. Further, method 700 may proceed to operation 704, where, in response to determining that the size of the compressed instance of the data is less than a predetermined threshold, the compressed instance of the data is encrypted, a message authentication code (MAC) is created for the encrypted compressed instance of the data, and zero-padded and MACed to the encrypted compressed instance of the data to create a formatted string.
[0101] Additionally, method 700 may proceed to operation 706, where, in response to determining that the size of the compressed instance of the data is greater than a predetermined threshold, the compressed instance of the data is discarded and the uncompressed instance of the data is encrypted to create a formatted string.
[0102] Referring now to Figure 8, a flowchart of a method 800 for performing data deduplication is shown, according to one embodiment. Method 800 may be performed in accordance with the present invention in a variety of environments, particularly any of the environments shown in Figures 1-4 and 9-10. Of course, those skilled in the art will recognize from reading this description that method 800 may include more or fewer operations than those specifically set forth in Figure 8.
[0103] Each of the steps of method 800 can be performed by any suitable component of an operating environment. For example, in various embodiments, method 800 may be performed in part or in whole by one or more servers, computers, or any other device having one or more processors therein. A processor, e.g., a processing circuit, chip, or module implemented in hardware and / or software, preferably having at least one hardware component, or a combination thereof, may be used in any device to perform one or more steps of method 800. Exemplary processors include, but are not limited to, a central processing unit (CPU), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or the like, combinations thereof, or any other suitable computing device known in the art. Other exemplary components include one or more coprocessors or accelerators, which may or may not be on the same chip as the CPU, or which may or may not be packaged on the same substrate or module.
[0104] 8, method 800 may begin at operation 802, where multiple ciphertext strings in a data storage are analyzed. In one embodiment, the data storage may include a database, a distributed storage system, a cloud computing environment, etc. In another embodiment, the analysis may include comparing a single ciphertext string in the data storage to other ciphertext strings in the data storage to determine whether matches (e.g., duplicates) exist within the data storage.
[0105] In yet another embodiment, one or more of the plurality of ciphertext strings may be created by performing a wide block encryption on an uncompressed instance of plaintext to create an uncompressed instance of encrypted plaintext having a length that matches the length of the uncompressed instance of plaintext. In yet another embodiment, one or more of the plurality of ciphertext strings may be created by performing a wide block encryption on a compressed instance of plaintext to create a compressed instance of encrypted plaintext. A length field and a variable length zero pad may be appended to the compressed instance of encrypted plaintext to create a ciphertext string having a length that matches the length of the uncompressed instance of plaintext.
[0106] Further, method 800 may proceed to operation 804, where one or more redundant ciphertext strings are removed from the data storage based on the analysis. In one embodiment, in response to determining that one or more matches / duplicates have been found for a given ciphertext string in the data storage, one or more instances of the given ciphertext string may be removed (e.g., deleted, transferred, etc.) from the data storage. In another embodiment, the duplicate ciphertext strings may be removed from the data storage such that a single instance of the ciphertext string remains in the data storage.
[0107] As a result, deduplication can be performed within the data storage, thereby maximizing the amount of available storage space within the data storage, thereby improving the performance of the hardware implementing the data storage.
[0108] 9 illustrates an example environment 900 for encrypting 906 a compressed instance of plaintext 902, according to one example embodiment. As shown, an uncompressed instance of plaintext 904 is received along with instructions to encrypt the uncompressed plaintext 904. In response, the uncompressed instance of plaintext 904 is compressed 914 to create a compressed instance of plaintext 902.
[0109] Additionally, the size of the compressed instance of plaintext 902 is compared to a predetermined size threshold (e.g., the size of the uncompressed instance of plaintext 904 minus the size of the zero pad 912 and the size of the length field 910) and found to be less than the predetermined size threshold. In response to this determination, encryption 906 is performed on the compressed instance of plaintext 902 to create an encrypted compressed instance of plaintext 908 having the same size as the compressed instance of plaintext 902.
[0110] Additionally, the length of the compressed instance of plaintext 902 is determined and added to the compressed instance of encrypted plaintext 908 as a length field 910. A MAC 916 is calculated for the compressed instance of encrypted plaintext 908 and added after the compressed instance of encrypted plaintext 908. A variable length zero pad 912 having a predetermined minimum length is created and added after the MAC 916.
[0111] In another embodiment, a zero pad 912 may be prepended to the compressed instance of encrypted plaintext 908, and a MAC 916 may be calculated for both the zero pad 912 and the compressed instance of encrypted plaintext 908.
[0112] Thus, a ciphertext string is created by combining the length field 910, the compressed instance of the encrypted plaintext 908, and zero padding 912. This ciphertext string has the same length as the uncompressed instance of plaintext 904, thereby maintaining length-preserving compression (LPC).
[0113] 10 illustrates an example environment 1000 for encrypting 1008 an uncompressed instance of plaintext 1004, according to one example embodiment. As shown, an uncompressed instance of plaintext 1004 is received along with instructions to encrypt the uncompressed plaintext 1004. In response, the uncompressed instance of plaintext 1004 is compressed 1002 to create a compressed instance of plaintext 1006.
[0114] Additionally, the size of the compressed instance of plaintext 1006 is compared to a predetermined size threshold and found to be greater than the predetermined size threshold. In response to this determination, the compressed instance of plaintext 1006 is discarded and encryption 1008 is performed on the uncompressed instance of plaintext 1004 to create an encrypted uncompressed instance of plaintext 1010 having the same size as the uncompressed instance of plaintext 1004.
[0115] In this way, length-preserving compression (LPC) is maintained.
[0116] [Opportunistic authentication of extended LPC encryption]
[0117] In one embodiment, a message authentication code (MAC) is inserted into the formatted data to be sufficiently compressible. The addition of the MAC makes the stored data more resistant to tampering, since the ciphertext cannot be easily affected. More specifically, it becomes impossible to replace any part of the ciphertext of the encrypted sectors protected by the MAC.
[0118] The insertion of a MAC is opportunistic in that the MAC is only inserted if the data is compressible enough so that there is room to insert the MAC.
[0119] In one embodiment, the MAC may be calculated separately on the plaintext (e.g., before encryption), which is called authenticate then encrypt (AtE). In another embodiment, the MAC may be calculated separately based on the ciphertext obtained by encryption, which is called encrypt then authenticate (EtA).
[0120] In yet another embodiment, the MAC may be calculated as part of the encryption by using an authenticated encryption algorithm such as GCM. In yet another embodiment, if the MAC is calculated separately, an HMAC calculation may be used to create a secure MAC.
[0121] In one embodiment, a method for authenticating units of data includes compressing each unit of data to form compressed data; calculating a length of the compressed data and comparing it to a threshold, where if the compressed data length is less than the threshold, the data is sufficiently compressible; if the data of the unit is sufficiently compressible, encrypting the data and inserting a message authentication code into a formatted version of the unit of data; and if the unit of data is not sufficiently compressible, encrypting the data without inserting a message authentication code.
[0122] In another embodiment, the encryption may take multiple forms, for example, a first method of encrypting fully compressible data is to use an initialization vector (IV) field and an IV-dependent mode of encryption, where the formatted unit of data includes both an IV field and a MAC, and a second method of encrypting fully compressible data is to encrypt the compressed data using a wide block encryption code, where the formatted unit of data includes a MAC but does not include an IV field.
[0123] In this way, data integrity can be improved by adding authentication to the compressed data (which may or may not be encrypted).
[0124] The present invention may be a system, method, or computer program product, or combination thereof, of any possible level of technical detail. The computer program product may include a computer-readable storage medium (or media) having computer-readable program instructions for causing a processor to implement an embodiment of the present invention.
[0125] A computer-readable storage medium may be a tangible device capable of retaining and storing instructions for use by an instruction execution device. A computer-readable storage medium may be, for example, but not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable combination thereof. A non-exhaustive list of more specific examples of computer-readable storage media also includes: portable computer diskettes, hard disks, random access memory (RAM), read-only memory (ROM), erasable programmable read-only memory (EPROM or flash memory), static random access memory (SRAM), portable compact disk read-only memory (CD-ROM), digital versatile disk (DVD), memory sticks, floppy disks, punch cards, or mechanically encoded devices such as ridge structures in grooves with instructions recorded thereon, and any suitable combination thereof. As used herein, computer-readable storage media should not be construed as ephemeral signals per se, such as radio waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through waveguides or other transmission media (e.g., light pulses through fiber optic cables), or electrical signals transmitted over wires.
[0126] The computer-readable program instructions described herein can be downloaded from a computer-readable storage medium to each computing / processing device or to an external computer or storage device over a network, such as the Internet, a local area network, a wide area network, or a wireless network, or a combination thereof. The network may include copper transmission cables, fiber optic transmissions, wireless transmissions, routers, firewalls, switches, gateway computers, or edge servers, or a combination thereof. A network adapter card or network interface in each computing / processing device receives the computer-readable program instructions from the network and forwards the computer-readable program instructions to a computer-readable storage medium within the respective computing / processing device for storage.
[0127] Computer-readable program instructions for carrying out the operations of the present invention may be source or object code written in any combination of one or more programming languages, including assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine-dependent instructions, microcode, firmware instructions, state setting data, configuration data for integrated circuits, or object-oriented programming languages such as Smalltalk® or C++, and procedural programming languages such as the "C" programming language or similar programming languages. The computer-readable program instructions may be executed entirely on the user's computer, partially on the user's computer, as a standalone software package, partially on the user's computer and partially on a remote computer, or entirely on a remote computer or server. In the latter case, the remote computer may be connected to the user's computer via any type of network, including a local area network (LAN) or a wide area network (WAN), or the connection may be to an external computer (e.g., via the Internet using an Internet Service Provider). In some embodiments, electronic circuitry, including, for example, a programmable logic circuit, a field programmable gate array (FPGA), or a programmable logic array (PLA), can execute computer-readable program instructions by personalizing the electronic circuitry using state information from the computer-readable program instructions to perform embodiments of the present invention. Other exemplary circuitry includes one or more co-processors or accelerators, which may or may not be on the same chip as the CPU, or which may or may not be packaged on the same substrate or module as the CPU.
[0128] Embodiments of the present invention are described herein with reference to flowchart illustrations and / or block diagrams that illustrate methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart illustrations and / or block diagrams, and combinations of blocks in the flowchart illustrations and / or block diagrams, can be implemented by computer-readable program instructions.
[0129] These computer-readable program instructions may be supplied to a processor of a computer or other programmable data processing apparatus such that the instructions, executed by the processor, form means for implementing the functions / acts specified in one or more blocks of the flowcharts and / or block diagrams to implement a machine. These computer-readable program instructions may be stored on a computer-readable storage medium capable of instructing a computer, programmable data processing apparatus, or other apparatus, or combination thereof, to function in a particular manner, such that the computer-readable storage medium on which the instructions are stored comprises an article of manufacture containing instructions that implement an embodiment of the functions / acts specified in one or more blocks of the flowcharts and / or block diagrams.
[0130] The computer-readable program instructions may be loaded into a computer, other programmable data processing apparatus, or other device to cause the computer, other programmable apparatus, or other device to perform a series of operational steps to realize a computer-implemented process, such that the instructions, which execute on the computer, other programmable apparatus, or other device, implement the functions / operations specified in one or more blocks of the flowcharts and / or block diagrams.
[0131] The flowcharts and block diagrams in the figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present invention. In this regard, each block in the flowcharts or block diagrams may represent a module, segment, or portion of instructions, including one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the blocks may occur out of the order noted in the figures. For example, two blocks shown in succession may actually be completed in a single step, may be executed in parallel, may be executed substantially in parallel, may be partially or fully overlapped, or the blocks may even be executed in reverse order, depending on the functionality involved. It will also be understood that each block in the block diagrams and / or flowchart diagrams, and combinations of blocks in the block diagrams and / or flowchart diagrams, can be implemented by a dedicated hardware-based system that performs the specified functions or operations or that implements a combination of dedicated hardware and computer instructions.
[0132] Additionally, systems according to various embodiments may include a processor and logic integrated with and / or executable by the processor, where the logic is configured to perform one or more of the process steps described herein. "Integrated" means that the processor has the logic embedded in hardware logic, such as an application-specific integrated circuit (ASIC), FPGA, etc. "Executable by the processor" means that the logic is hardware logic, software logic, such as firmware, part of an operating system, part of an application program, or some combination of hardware and software logic, accessible by the processor and configured to cause the processor to perform some function when executed by the processor. The software logic may be stored in any memory type known in the art, local and / or remote. Any processor known in the art may be used, such as a software processor module and / or hardware processor, such as an ASIC, FPGA, central processing unit (CPU), integrated circuit (IC), graphics processing unit (GPU), etc. Other example processors include one or more co-processors or accelerators, which may or may not be on the same chip, or packaged on the same substrate or module, as the CPU.
[0133] It will be apparent from the above description that the various features of the above systems and / or methods may be combined in any manner, thereby creating multiple combinations.
[0134] It will also be appreciated that embodiments of the present invention may be provided in the form of a service that is deployed on behalf of a customer to provide the service on demand.
[0135] The descriptions of various embodiments of the present invention have been presented for illustrative purposes, but are not intended to be exhaustive or to be limited to the disclosed embodiments. Many modifications and variations will be apparent to those skilled in the art without departing from the scope and spirit of the described embodiments. The terms used herein are chosen to best explain the principles of the embodiments, practical applications, or technical improvements over commercially available technologies, or to enable others skilled in the art to understand the embodiments disclosed herein. [Explanation of symbols]
[0136] 10 cloud computing nodes 12 Computer Systems / Servers 14 External Devices 16 Processing Unit 18 Bus 20 Network Adapters 22 I / O interfaces 24 displays 28 memory 30 RAM 32 Cache Memory 34 Storage Systems 50 Cloud Computing Environments 54A PDA or cell phone 54B Desktop Computer 54C Laptop Computer 54N Automotive Computer System 60 Hardware and Software Layers 61 Mainframe 62 RISC architecture-based servers 63 servers 64 Blade Servers 65 Storage Devices 66 Networks and Networking Components 67 Network Application Server Software 68 Database Software 70 Virtualization Layer 71 Virtual Servers 72 Virtual Storage 73 Virtual Networks 74 Virtual Applications and Operating Systems 75 Virtual Clients 80 Management layer 81 Resource Provisioning 82 Metering and Pricing 83 User Portal 84 Service Level Management 85 Planning and Implementation 90 Workload Tier 91 Mapping and Navigation 92 Software Development and Lifecycle Management 93 Virtual Classroom Educational Delivery 94 Data Analysis Processing 95 Transaction Processing 96 Message Authentication 400 Storage System 402 Upper Storage Tier 404 Random or Direct Access Media 406 Lower Storage Tier 408 Low-performance storage media 410 Network 412 Storage System Manager 414 Host Interface 416 Additional Storage Tier 900 Environment 902 Plaintext Compression Instances 904 plaintext 906 Encryption 908 Compressed instances of encrypted plaintext 910 Length Field 912 Zero Pad 914 Compression 916 MAC 1000 environment 1002 Compression 1004 plaintext 1006 Plaintext Compression Instances 1008 Encryption 1010 Uncompressed instance of encrypted plaintext
Claims
1. 1. A computer-implemented method comprising: compressing, by a computer, an uncompressed instance of the data to create a compressed instance of the data; encrypting the compressed instance of the data in response to the computer determining that the size of the compressed instance of the data is less than a predetermined threshold value that is the size of an uncompressed instance of the data minus the size of a zero pad, a length field, and a message authentication code (MAC); creating the MAC for a compressed instance of the encrypted data; the computer appending the zero pad and the MAC to a compressed instance of the encrypted data to create a formatted string; A computer-implemented method comprising:
2. The computer-implemented method of claim 1 , wherein the uncompressed instance of data comprises a plaintext instance.
3. The computer-implemented method of claim 1 or 2, wherein the compressed instance of data is discarded in response to determining that the size of the compressed instance of data is greater than the predetermined threshold.
4. The computer-implemented method of claim 1 , wherein the compressed instance of data is encrypted using a wide block cipher.
5. The computer-implemented method of claim 1 , wherein the compressed instance of data is encrypted using an uncompressed encryption mode that includes an initialization vector.
6. A computer-implemented method as described in any one of claims 1 to 5, further comprising the step of the computer adding a length field to the compressed instance of the encrypted data, the length field including a field indicating the length of the compressed instance of the encrypted data.
7. 7. The computer-implemented method of claim 1, wherein the zero pad comprises a highly compressible and easily detectable data pattern of a variable number of bytes.
8. A computer-implemented method as described in any one of claims 1 to 7, wherein the length of the length field, the compressed instance of the encrypted data, the zero pad, and the MAC is equal to the length of the uncompressed instance of the data.
9. A computer-implemented method as described in any one of claims 1 to 8, further comprising a step in which the computer stores or transmits the formatted string.
10. 10. The computer-implemented method of claim 1, wherein the MAC comprises a Galois Message Authentication Code (GMAC) created as part of a Galois Counter Mode (GCM) encryption mode.
11. The computer-implemented method of claim 1 , wherein the MAC comprises a keyed-hash message authentication code or a hash-based message authentication code.
12. A computer-implemented method as described in any one of claims 1 to 11, further comprising a step in which the computer uses the MAC to verify data integrity and authenticity of the formatted string.
13. The processor compressing an uncompressed instance of the data to create a compressed instance of the data; encrypting the compressed instance of data in response to determining that the size of the compressed instance of data is less than a predetermined threshold value that is the size of an uncompressed instance of data minus the size of a zero pad, a length field, and a message authentication code (MAC); creating said MAC for a compressed instance of said encrypted data; appending said zero pad and said MAC to a compressed instance of said encrypted data to create a formatted string; A computer program for executing the above.
14. 14. The computer program product of claim 13, wherein the uncompressed instance of data comprises a plaintext instance.
15. 15. The computer program product of claim 13 or 14, wherein the compressed instance of data is discarded in response to determining that the size of the compressed instance of data is greater than the predetermined threshold.
16. 16. The computer program product of claim 13, wherein the compressed instance of data is encrypted using a wide block cipher.
17. 16. The computer program product of claim 13, wherein the compressed instance of data is encrypted using an uncompressed encryption mode that includes an initialization vector.
18. 1. A computer-implemented method comprising: compressing, by a computer, an uncompressed instance of the data to create a compressed instance of the data; in response to determining that the size of the compressed instance of data is less than a predetermined threshold value of the size of the uncompressed instance of data minus the size of a zero pad, a length field, and a message authentication code (MAC); the computer encrypts the compressed instance of the data; the computer creates the MAC for a compressed instance of the encrypted data; and The computer appends the zero pad and the MAC to a compressed instance of the encrypted data to create a formatted string. Stages and in response to determining that the size of the compressed instance of data is greater than the predetermined threshold; the computer discards the compressed instance of the data; and The computer encrypts the uncompressed instance of the data to create the formatted string. Stages and A computer-implemented method comprising:
Citation Information
Patent Citations
Image compression method and apparatus
JP2009213083A
Encryption device, control method, and program
JP2015082077A
Encrypted and Compressed Data Transmission with Padding
US20200169382A1