Software Access Through Heterogeneous Encryption

HESS addresses the challenge of secure software access by encrypting software programs and using license keys for decryption, ensuring secure and resource-efficient access, even in network-limited environments.

JP7655656B2Active Publication Date: 2025-04-02INTERNATIONAL BUSINESS MACHINE CORPORATION
View PDF 4 Cites 0 Cited by

Patent Information

Application Number
JP2023518437
Authority / Receiving Office
JP · JP
Patent Type
Patents
Current Assignee / Owner
Priority Date
2020-09-29
Filing Date
2021-07-16
Publication Date
2025-04-02
Estimated Expiration
2041-07-16

AI Technical Summary

Technical Problem

Existing technologies face challenges in securely providing access to software while preventing unauthorized access and tampering, particularly in scenarios where network connectivity is limited or absent.

Method used

The implementation of Heterogeneous Cryptographic Software Security (HESS) involves encrypting software programs into a heterogeneous program payload, which includes both non-encrypted and encrypted components. This payload is distributed with a license key that decrypts specific programs, ensuring secure access and preventing unauthorized execution.

Benefits of technology

HESS provides robust security by ensuring that only authorized users can access and execute specific software components, while minimizing resource usage and maintaining functionality even on air-gapped systems, thus enhancing software protection and usability.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure 0007655656000001
    Figure 0007655656000001
  • Figure 0007655656000002
    Figure 0007655656000002
  • Figure 0007655656000003
    Figure 0007655656000003
Patent Text Reader

Abstract

A first copy of a heterogeneous program payload is provided to a first computing device. The heterogeneous program payload includes an unencrypted component and a set of one or more encrypted components. The set of encrypted components corresponds to a set of one or more programs. The unencrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key. The loader program code is configured to perform a decryption action on the set of encrypted components of the heterogeneous program payload in response to receiving the first license key.
Need to check novelty before this filing date? Find Prior Art

Description

[Technical field]

[0001] This disclosure relates to software access, and more particularly, to providing access to various programs of software through encryption. [Background technology]

[0002] Software may be provided to one or more parties through software distribution mechanisms such as physical copies or network access to the software. Controlling access to the software only by authorized parties remains a technological and security challenge. Summary of the Invention

[0003] According to various embodiments, methods, systems, and computer program products are disclosed.

[0004] A first copy of a heterogeneous program payload is provided to a first computing device. The heterogeneous program payload includes an unencrypted component and a set of one or more encrypted components. The set of encrypted components corresponds to a set of one or more programs. The unencrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key. The loader program code is configured to perform a decryption action on the set of encrypted components of the heterogeneous program payload in response to receiving the first license key.

[0005] The above summary is not intended to describe each illustrated embodiment or every implementation of the present disclosure.

[0006] The drawings contained in this application are incorporated in and constitute a part of this specification. The drawings illustrate embodiments of the present disclosure and, together with the description, serve to explain the principles of the present disclosure. The drawings are merely illustrative of particular embodiments and are not intended to limit the disclosure. [Brief description of the drawings]

[0007] [Figure 1] 1 illustrates representative major components of an example computer system that may be used in accordance with some embodiments of the present disclosure. [Diagram 2] 1 illustrates a cloud computing environment in accordance with an embodiment of the present invention. [Diagram 3] 3 illustrates abstraction model layers according to an embodiment of the present invention. [Figure 4] 1 illustrates a heterogeneous encrypted software security (HESS) system for securing one or more programs of a software payload in accordance with some embodiments of the present disclosure. [Diagram 5] 1 illustrates an example method of a HES performed by a client system according to some embodiments of the present disclosure. [Figure 6] 1 illustrates an example method for creating a component of a HES to be provided to a client system, according to some embodiments of the present disclosure. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

[0008] While the invention is susceptible to various modifications and alternative forms, specifics thereof have been shown by way of example in the drawings and will be described in detail. It is to be understood, however, that the intention is not to limit the invention to the particular embodiments described. On the contrary, the intention is to cover all modifications, equivalents, and alternatives falling within the scope of the invention.

[0009] Aspects of the present disclosure relate to software access, and more particularly to providing access to various programs of software through encryption. The present disclosure is not necessarily limited to such applications, and various aspects of the present disclosure may be understood through a discussion of various examples using this context.

[0010] Software is the core that makes a computer work. Software may be a collection of programs. Each program of software may come in the form of an executable file configured to perform a number of operations for a user. For example, a word processor may be a type of software configured to receive input from a user and generate a text document. Software may come in the form of differently configured versions or variants of executable code configured to perform various programs or operations for a user. For example, an image editor may include a first configuration having a subset of 1,110 features. A second configuration of the image editor may include a complete set of over 3,000 features. Software may come in the form of a suite of related or unrelated programs. For example, a productivity suite may include a word processor and a presentation creator. The word processor may include a first number of functions that can operate independently. The presentation creator may include a second number of functions that can operate independently. Both the word processor and the presentation creator may contain additional interrelated features, such as the ability to export or import drawings, text, or other elements between the word processor and the presentation creator.

[0011] Creating software is costly, and many individuals may be employed to create and maintain the software. For example, developers, engineers, testers, etc. may be dedicated to creating and maintaining hundreds or even thousands of programs that make up a given piece of software. Implementing software in various forms is an ongoing challenge for software creators. Several approaches have been taken in an attempt to secure the software and provide access to the myriad features, components, programs, variants, and other forms of the software. The challenge can be complex as software creators attempt to create quality software while providing the same access to clients who are granted access to the software.

[0012] Furthermore, control of software can be a significant security issue. For example, a third party may tamper with the software, which may then give the third party access to the various programs that make up a given piece of software. The tampering may be malicious in that viruses or other techniques for gathering information may be used. Malicious tampering or other access to software can also be a significant technical problem. For example, malicious tampering of software may cause the software to no longer work properly or may cause data to be lost.

[0013] One approach to securing software is to generate a unique version of the binaries for every purchaser of the software. Specifically, the software provider may compile, build, or otherwise generate a first software executable for a first client of the software. The software provider may further generate a second software executable for a second client of the software. Generating a custom version of the software for each user may have drawbacks. For example, each version created may introduce complexity in that each version may contain duplicate lines of code or additional logic. The increased complexity may also increase the memory footprint or processing cycles required for successful execution of the software. If there are only one or two different clients that want a certain version of the software, it may be possible to create a customized version of the software. However, there may be dozens or hundreds or more users of the software, so creating a version of the software for each user may quickly become impractical or impossible. Furthermore, with software customization and version updates, maintaining the software can quickly become quite difficult. For example, some clients may want different updates, and the discovery of bugs may require updates to each version of the software. Rather than updating a single collection of software, it may be necessary to maintain each version of the software for each client, which may consume additional memory and processing power to generate each version of the collection of software, as well as to successfully test and debug each version of the software.

[0014] Another approach to securing software is license string-based software distribution. In license string-based software distribution, the software creator generates an unencrypted string (e.g., a key string, a series of letters, numbers, and symbols, a license file) for each client of the software. Specifically, the software may be shipped with all versions, components, features, or other relevant variants bundled together in a payload (e.g., a distributable version of the software). Additionally, the software may include the ability to accept a license string, read the value of the license string, and determine the various variants of the software that the client is permitted to access. For example, a first user may have a first license string that grants access to a first variant of the software, such as features 2, 5, and 7, out of 12 possible variants. In another example, a second user may have a second license string that grants access to a second variant of the software, such as features 1, 2, 3, 5, and 7, out of 12 possible variants.

[0015] Each license string may include one or more embedded characteristics, characters, values, or other associated attributes. The embedded attributes may correspond to different variants of the software. For example, a first attribute in the license string may correspond to a first software variant and a second attribute in the license string may correspond to a second software variant. The software may include logic or code configured to accept the license string, read and process the various attributes, and responsively grant access to the variants of the software.

[0016] A license string-based approach may have additional disadvantages. The software may be subjected to debugging or other attacks to determine the attributes of the license string. For example, a malicious third party may run the software in a debugger and monitor the software during run-time. Logic within the software that controls access to various components, features, configurations, or programs of the software may be monitored to determine which particular flags, keys, attributes, or values ​​are responsible for or correspond to various configurations. For example, a malicious third party may monitor the program execution of the software to determine that an attribute in the fourth position of the license string corresponds to a capability of the software that grants permission to execute a first program. A license string-based approach may also be reverse engineered. For example, a malicious third party may decompile the software and determine the access control program logic within the software from the decompiled source code. In another example, a malicious third party may monitor the memory space of the software as the software is executed by a processor. While monitoring the memory space, a malicious third party may be able to determine various attributes that correspond to access to various programs of the software. Once the various attributes of the values ​​are determined, it may be easy to share or distribute the variants to other parties. For example, a malicious third party may share a license string on the Internet with a value that grants access to every program of the software.

[0017] Another drawback is that through decompilation or other malicious techniques, a malicious third party may be able to identify the various components or programs that are access controlled and extract them for use. For example, a malicious third party may perform a decompilation technique to read or access the various programs that make up the software. Once the malicious third party has access to the various programs, the malicious third party may recompile or create a new version of the software that does not have any license string-based access control logic. This new version of the software may be executable by the malicious third party without any license strings or other access controls.

[0018] Software creators may attempt to make such malicious techniques more difficult. For example, software creators may attempt to create more complex algorithms that perform various steps to obfuscate or observe or intercept programs that grant access to various components of the software. More complex algorithms may only be successful in limited circumstances. For example, a more complex algorithm in an access control program may involve the use of large amounts of memory or many processing cycles. Such may only be beneficial on computers with large amounts of memory, such as mainframe servers or supercomputers. Increasingly, software is being run on computers with more limited resources that cannot run complex algorithms. For example, a smartphone may not be able to run complex algorithms related to access control of other programs in the software due to a lack of random-access memory (RAM). In another example, an embedded processor in an internet of things (IoT) device may be able to run complex algorithms after days or weeks of processing, making the use of security protection on IoT devices impractical.

[0019] Another approach to software security is the network-based software security approach. In a network-based approach, the software connects to a central server through a network (e.g., the Internet) to verify that the client is authorized to run the software. In a network-based approach, the software may only run while receiving a signal from the central server. This network-based software security approach has a number of further drawbacks. First, the approach can be pirated by a third party. For example, a malicious third party may monitor the network traffic from a copy of the software when it runs on a given client and communicates with the central server. Through monitoring, the signal and other related network traffic in between may be recorded or the verification logic may be reverse engineered. A malicious third party may generate a similar signal in response to the software and may pirately indicate to the software that it is the central server. Second, a network-based approach may be resource intensive. For example, a software creator may expend significant resources to own and operate the various components of the central server and the network bandwidth associated with making the central server available to all clients.

[0020] Third, network-based approaches may be unreliable. Specifically, a central server outage or network availability issues may compromise the ability of a given client to authenticate. For example, a user may have a smartphone and a copy of software that may be configured to communicate with a central server to verify the security of the software it runs. If the smartphone accidentally loses network connectivity, the copy of the software may no longer run because access control is no longer available. Fourth, network-based approaches may not be technically possible in some practical situations. Specifically, some clients of the software may operate a computer that is an air-gapped system. An air-gapped system may be a system that is not communicatively coupled to any other computer. An air-gapped system may be required for a particular client. For example, a client may operate a system with security or privacy requirements for higher security in a particular industry (e.g., finance, health, defense). The client may not be communicatively connected to any other computer for secure operation, and may even perform operations without a network connection. Without network connectivity, the network-based methodology would not be successful in validating one or more programs and the software would not be operational.

[0021] Heterogeneous Encryption Software Security (HESS) may be implemented with one or more advantages and features compared to other forms of securing software. HESS may operate, in part, by encrypting one or more programs that make up the software into a set of one or more encrypted components. The set of one or more encrypted components may be combined with non-encrypted components to make up a heterogeneous program payload. For example, the program may be one or more program code files, such as from an interpreted language, arranged in one or more folders and compressed into a program package (e.g., Java program code in a JAR file). In another example, one or more source code files, such as from a compiled language, may be compiled together into a set of binary values ​​in a program executable file. In either example, the portions of the program that make up the payload may be encrypted using a first encryption process. For example, each portion of the payload could be encrypted using a symmetric encryption algorithm such as AES-128 or greater key length, or an asymmetric encryption algorithm such as RSA-2048 or ECDSA-224 or greater key lengths, or an attribute-based encryption scheme such as a key-policy attribute-based encryption scheme (KP-ABE) or KP-ABE with fixed-size ciphertexts.

[0022] Once encrypted, the heterogeneous program payload may have a set of one or more encrypted components corresponding to one or more programs. The encryption process may only cover a portion of the components (e.g., a set of one or more programs). In particular, one or more other programs may remain unencrypted in the heterogeneous program payload. In some embodiments, a program such as a loader program may remain an unencrypted component of the heterogeneous program payload. For example, a program and any associated or supporting libraries or runtimes may remain a set of unencrypted bits in a binary executable file, which may also include a set of encrypted bits that includes a set of encrypted components. In another example, a distributable program such as a JAR file may have one or more code files and folders that correspond to unencrypted portions of the heterogeneous program payload.

[0023] The heterogeneous program payload of the HESS may operate in conjunction with a key, such as a license key. In particular, the heterogeneous program payload may be distributed to one or more computing systems with or without the key. In some embodiments, the HESS may be in the form of a heterogeneous program payload and multiple keys. In particular, a key may be generated for each potential client machine configured to operate a copy of the heterogeneous program payload. Each key may include one or more encrypted program attributes corresponding to various programs in the heterogeneous program payload. By way of example, a first key may include 30 alphanumeric characters that are attributes in encrypted form. The encrypted program attributes may be one or more letters, characters, symbols, etc., that represent the program attributes in encrypted form that grant permission to access a subset of the set of encrypted programs in the set of encrypted components.

[0024] Each key may be different from any other key. In particular, each key of the HESS may be constructed in such a way that the set of one or more encrypted program attributes is different for each key. In other words, two keys that grant the same permissions to a heterogeneous program payload do not share encrypted program attributes. For example, a first key may include one or more program attributes that allow operation of only a first program of a set of programs of the heterogeneous program payload. A second key may include the same one or more program attributes that also allow operation of only the first program. The first key may be encrypted such that the one or more program attributes are in the form of a first set of one or more encrypted program attributes. The second key may be further encrypted such that the one or more program attributes are in the form of a second set of one or more encrypted program attributes, also in the form of encrypted program attributes. Since only the encrypted program attributes are considered observable, the program attributes would not be determinable, understandable, or otherwise ascertainable to determine upon inspection.

[0025] The non-encrypted component of the heterogeneous program payload may include code configured to operate with and provide access to the set of encrypted components that make up the remainder of the payload. In particular, the non-encrypted component of the heterogeneous program payload may be configured as loader program code ("loader"). The loader of the HESS heterogeneous program payload may be configured to receive a key and perform one or more decryption techniques. The decryption technique of the heterogeneous program payload may be a self-decryption technique. In particular, the loader program of the heterogeneous program payload may be configured to accept one or more commands targeted to the set of encrypted components. For example, a user may initiate a request to effect execution of a first program that is encrypted in a first encrypted component of the one or more components. The user may operate by providing inputs to the loader to perform the program's operations. For example, the HESS may be configured to protect a productivity suite provided in the form of software that includes a set of encrypted components that includes a text editor program and an image editor program. A user may initiate operation of HESS by sending the loader a command to run a text editor program.

[0026] The loader program code may be configured to perform a decryption action on the first encryption component upon receiving the key. In particular, the loader may be configured to receive the key, perform a decryption action on the key, and determine the validity of the key to access a program stored within the encryption component of the heterogeneous program payload. For example, if the key, when decrypted by the loader, includes encrypted program attributes that include program attributes corresponding to a requested program, the loader may be configured to decrypt the program and load the program into the primary memory for execution. In another example, if the key, when decrypted by the loader, includes encrypted program attributes that do not include program attributes corresponding to a requested program, the loader may be configured to refuse to execute an encryption component that includes the program.

[0027] Heterogeneous program payloads may have technical advantages over other forms of key and executable distribution. In particular, the HESS key values ​​may be resistant to malicious attacks. First, HESS may only operate based on keys that include encrypted program attributes, whereas license string-based techniques may operate based on unencrypted values. A malicious third party would not be able to read one or more program attributes that are encrypted in the encrypted program attributes of the key. The loader may be configured to only decrypt a particular program that corresponds to an encrypted program attribute, without specifically generating the unencrypted program attribute. For example, the loader may operate only by obtaining as program inputs a key and a request for execution of a first program in the form of a program execution instruction for the first program. The output of the loader may be only the execution of the first program, and may not include the unencrypted program attribute corresponding to the first program.

[0028] Second, the loader program may operate with fewer resources than other approaches. Specifically, a simpler form of calculation and decryption algorithm may be performed by the loader than other approaches, such as license string-based security approaches. For example, the decryption approach may rely on a complex set of processes or a set of dedicated circuitry or cryptographic elements. The dedicated decryption process of other approaches may be limited to specific hardware or to smartphones or other portable computing devices with significant processing power. In contrast, the decryption process of the loader may be a process that operates with relatively low resource usage, such as a computer process that executes using only a few tens of processing cycles and uses only a few kilobytes of primary memory.

[0029] Third, HESS may perform decryption in a manner that is robust to observation or debugging by a malicious third party. For example, the loader program code may be decompiled or debugged, but the loader's decryption methodology may not reveal program attributes. The loader may operate by performing unobservable decryption actions. For example, the code decrypted by the loader program may still be some form of encrypted code, similar to techniques described as "secure" or "secret" code execution. In some embodiments, homomorphic encryption techniques may be used such that the encrypted payload is still executable, while still preventing an attacker from observing the code. In some embodiments, although limited operations may be observable, the operations performed by the loader may not in any way reveal, reveal, or otherwise allow access to non-encrypted program attributes. For example, each step of the loader program may only reveal pointers, references, or other indications to certain sections or portions of a set of encrypted components, but may not reference, disclose, or otherwise reveal the actual programs stored in the encrypted components. In some embodiments, the loader code may not include any access control logic. The loader code may not include any program code that indicates or selects the particular component to be decrypted. In some embodiments, the license key may store an indication, pointer, or other related reference to a particular program in an encrypted form, such as an encrypted program attribute. The decryption operation may result in an unencrypted pointer or reference from the encrypted program attribute of the license key to the particular program.

[0030] As a result, the loader of the heterogeneous program payload may never reveal any access control or program attributes that grant permission to any unencrypted programs or programs stored in the encrypted components, or otherwise store copies thereof in the clear. Furthermore, the loader may only decrypt a portion of the encrypted components. For example, a first heterogeneous program payload may include a set of three encrypted components and an unencrypted component that includes loader program code for the set. Upon receiving a first license key that grants access to the first encrypted component, only the first encrypted component may be decrypted to a secure portion of the primary memory. The second and third encrypted components may not be decrypted and may never be decrypted by the loader upon receiving only the first license key. This fine-grained approach to decryption may prevent unauthorized access or modification of other encrypted components. As a result, since other components of the software are never decrypted and there is no access control logic, the undecrypted programs cannot be decompiled, reverse engineered, or otherwise viewed, observed, or obtained.

[0031] Fourth, HESS may operate on an air-gapped machine. The heterogeneous program payload may be partially self-decrypting. Specifically, the loader program code of the heterogeneous program payload may operate without requiring a network connection. The loader of the heterogeneous program payload may operate without communication to other computers. The loader may operate with only access to inputs about which program (stored in a set of cryptographic components) and access to a license key.

[0032] Fifth, HESS can be relatively simple to maintain. Specifically, a heterogeneous program payload can contain all of the various configurations of components, functions, and other programs for distribution in a single payload. For example, a first license key may contain encrypted program attributes that allow only a first encrypted component to be decrypted and executed. In another example, a second license key may contain multiple encrypted program attributes that allow multiple encrypted components to be decrypted and executed. When new versions are created, the software creator may only need to maintain a single heterogeneous program payload for all specific clients, and the various functions or variants may be controlled only by the combination of the license key and the loader program code stored in the non-encrypted components.

[0033] FIG. 1 illustrates representative major components of an example computer system 100 (or computer) that may be used in accordance with some embodiments of the present disclosure. Of course, the individual components may vary in complexity, number, type, or configuration, or any combination thereof. The specific examples disclosed are for illustrative purposes only and are not necessarily limited to such variations. The computer system 100 may include a processor 110, a memory 120, an input / output interface (herein I / O or I / O interface) 130, and a main bus 140. The main bus 140 may provide a communication path for other components of the computer system 100. In some embodiments, the main bus 140 may connect to other components, such as a dedicated digital signal processor (not shown).

[0034] The processor 110 of the computer system 100 may comprise one or more cores 112A, 112B, 112C, 112D (collectively 112). The processor 110 may further comprise one or more memory buffers or caches (not shown) that provide temporary storage of instructions and data for the cores 112. The cores 112 may execute instructions on inputs provided from the cache or from the memory 120 and output results to the cache or memory. The cores 112 may comprise one or more circuits configured to perform one or more methods according to embodiments of the present disclosure. In some embodiments, the computer system 100 may comprise multiple processors 110. In some embodiments, the computer system 100 may be a single processor 110 with only one core 112.

[0035] The memory 120 of the computer system 100 may include a memory controller 122. In some embodiments, the memory 120 may include a random access semiconductor memory, storage device, or storage medium (either volatile or non-volatile) for storing data and programs. In some embodiments, the memory may be in the form of a module (e.g., a dual in-line memory module). The memory controller 122 may communicate with the processor 110 and facilitate the storage and retrieval of information in the memory 120. The memory controller 122 may communicate with the I / O interface 130 and facilitate the storage and retrieval of inputs or outputs in the memory 120.

[0036] The I / O interface 130 may include an I / O bus 150, a terminal interface 152, a storage interface 154, an I / O device interface 156, and a network interface 158. The I / O interface 130 may connect the main bus 140 to the I / O bus 150. The I / O interface 130 may route instructions and data from the processor 110 and memory 120 to various interfaces of the I / O bus 150. The I / O interface 130 may further route instructions and data from the various interfaces of the I / O bus 150 to the processor 110 and memory 120. The various interfaces may include a terminal interface 152, a storage interface 154, an I / O device interface 156, and a network interface 158. In some embodiments, the various interfaces may include a subset of the aforementioned interfaces (e.g., an embedded computer system in an industrial application may not include the terminal interface 152 and the storage interface 154).

[0037] Logical modules in computer system 100, including but not limited to memory 120, processor 110, and I / O interface 130, may communicate faults and changes to one or more components to a hypervisor or operating system (not shown). The hypervisor or operating system may allocate the various resources available in computer system 100 and track the location of data in memory 120 and processes assigned to the various cores 112. In embodiments that combine or rearrange elements, aspects and capabilities of the logical modules may be combined or repartitioned. Such variations will be apparent to those skilled in the art.

[0038] Of course, although this disclosure includes a detailed description of cloud computing, implementation of the teachings described herein is not limited to a cloud computing environment. Rather, embodiments of the present invention may be implemented in connection with any other type of computing environment now known or later developed. Cloud computing is a service delivery model that provides on-demand, convenient 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 the service provider. Such a cloud model may include at least five characteristics, at least three service models, and at least four deployment models.

[0039] Its features are as follows.

[0040] On-Demand Self-Service: Cloud consumers can unilaterally provision computing capacity, such as server time and network storage, as they need it, automatically and without the need for human interaction with the service provider.

[0041] Pervasive Network Access: Each capability is available over the network and accessed through standard mechanisms that facilitate use by heterogeneous thin and thick client platforms (e.g., mobile phones, laptops, and personal digital assistants (PDAs)).

[0042] Resource Pooling: A provider's computing resources are pooled to serve multiple consumers using a multi-tenant model, with various physical and virtual resources dynamically allocated and reallocated on demand. Generally there is a sense of location independence in that consumers have no control or knowledge of the exact location of the resources provided, although at higher levels of abstraction they may be able to specify a location (e.g. country, state, or data center).

[0043] Rapid Elasticity: Capacity can be rapidly and elastically provisioned, sometimes automatically, to quickly scale out, and rapidly released to quickly scale in. In many cases, capacity available for provisioning appears unlimited to the consumer, and any amount can be purchased at any time.

[0044] Measured Services: Cloud systems automatically control and optimize resource usage by leveraging metering capabilities (e.g., storage, processing, bandwidth, and active user accounts) at a level of abstraction appropriate to the type of service. Resource usage can be monitored, controlled, and reported, providing transparency to both providers and consumers of the services being utilized.

[0045] The service model is as follows:

[0046] Software as a Service (SaaS): The capability 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 (web-based email). The consumer does not manage or control the underlying cloud infrastructure, including networks, servers, operating systems, storage, or even the capabilities of individual applications, with the possible exception of limited per-user application configuration settings.

[0047] Platform as a Service (PaaS): The capability offered to the consumer is the deployment onto a cloud infrastructure of applications created or acquired by the consumer, written using programming languages ​​and tools supported by the provider. The consumer does not manage or control the underlying cloud infrastructure, including the network, servers, operating systems, or storage, but does control the deployed applications and, in some cases, the configuration of the application hosting environment.

[0048] Infrastructure as a Service (IaaS): The capability provided to a consumer is the provisioning of processing, storage, network, and other basic computing resources upon which the consumer can deploy and run any software, which may include operating systems and applications. Consumers do not manage or control the underlying cloud infrastructure, but do control the operating system, storage, deployed applications, and in some cases, limited control over some networking components (e.g., host firewalls).

[0049] The deployment model is as follows:

[0050] Private Cloud: The cloud infrastructure is operated exclusively for an organization. It may be managed by the organization or a third party and may reside on-premise or off-premise.

[0051] Community Cloud: The cloud infrastructure is shared by several organizations and supports a specific community with shared concerns (e.g., mission, security requirements, policy, and compliance considerations). It may be managed by the organization or a third party and may reside on-premise or off-premise.

[0052] Public Cloud: Cloud infrastructure is made available to the public or large industry organizations and is owned by an organization that sells cloud services.

[0053] Hybrid Cloud: A cloud infrastructure is a composite of two or more clouds (private, community, or public) where each cloud remains a unique entity but is bound by standard or proprietary technologies that enable data and application portability (e.g. cloud bursting for load balancing between clouds).

[0054] Cloud computing environments are service-oriented and emphasize statelessness, loose coupling, modularity, and semantic interoperability. At the heart of cloud computing is an infrastructure that includes a network of interconnected nodes.

[0055] Referring now to FIG. 2, an exemplary cloud computing environment 50 is shown. 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, for example, 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 may also communicate with each other. The nodes 10 may be physically or virtually grouped together in one or more networks, such as a private cloud, a community cloud, a public cloud, or a hybrid cloud, or any combination thereof, as described above (not shown). This allows the cloud computing environment 50 to provide infrastructure, platform, or software, or any combination thereof, as a service for which the cloud consumer does not need to maintain resources on a local computing device. Of course, the types of computing devices 54A-N shown in FIG. 2 are for illustrative purposes only, and the computing node 10 and cloud computing environment 50 can communicate with any type of computerized device and over any type of network or network addressable connection (e.g., using a web browser) or both.

[0056] Referring now to Figure 3, a set of functional abstraction layers provided by cloud computing environment 50 (Figure 2) is shown. It should be understood in advance that the components, layers, and functions shown in Figure 3 are for illustrative purposes only, and embodiments of the present invention are not limited thereto. As shown, the following layers and corresponding functions are provided:

[0057] The hardware and software layer 60 includes hardware and software components. Examples of hardware components include mainframes 61, RISC (Reduced Instruction Set Computer) architecture based servers 62, servers 63, blade servers 64, storage devices 65, and networks and networking components 66. In some embodiments, the software components include network application server software 67 and database software 68. The virtualization layer 70 provides an abstraction layer over which 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, may be provided.

[0058] In one example, the management layer 80 may provide the following functions: Resource provisioning 81 provides dynamic procurement of computing and other resources utilized to execute tasks within the cloud computing environment. Metering and pricing 82 provides tracking of costs as resources are utilized within the cloud computing environment and billing or invoicing for the consumption of such resources. In one example, such resources may include application software licenses. Security provides identity verification of cloud consumers and tasks, and protection of data and other resources. User portal 83 provides access to the cloud computing environment for consumers and system administrators. Service level management 84 provides allocation and management of cloud computing resources such that required service levels are met. Service level agreement (SLA) planning and achievement 85 provides advance provisioning and procurement of cloud computing resources in anticipation of future demand according to SLAs.

[0059] The workload layer 90 provides examples of functionality for which a cloud computing environment may be utilized. Examples of workloads and functions that may be provided from this layer include mapping and navigation 91, software development and lifecycle management 92, virtual classroom instructional delivery 93, data analytics processing 94, transaction processing 95, and HESS 96.

[0060] FIG. 4 illustrates a Heterogeneous Encryption Software Security (HESS) system 400 for securing one or more programs of a software payload according to some embodiments of the present disclosure. The system 400 may be one or more components of a computing device performing secure software execution operations. The computing device may be a client device such as computer 100. The system 400 may include multiple pieces of hardware including a processor 410, a secondary memory 420, and a primary memory 430. The system 400 may further include an input (not shown) for receiving commands for execution by the processor 410. For example, receiving commands to execute other programs or subroutines from a first program or a user.

[0061] The secondary memory 420 may facilitate the storage or retention (either temporarily or more permanently) of programs and executable code provided to the processor 410 and the primary memory 430. In a first example, the secondary memory 420 may be a storage device such as a hard disk drive or a solid state storage device or other computer component configured to store one or more bits of data. Continuing with the first example, the primary memory 430 may be random access memory (RAM) and may receive data from the secondary memory 420. In a second example, the secondary memory 420 may be RAM and the primary memory 430 may be one or more registers or caches of the processor 410.

[0062] The system 400 may be configured to receive and execute secure software. In particular, the system 400 may be configured to receive a license key (key) 440 and a copy of a heterogeneous program payload (payload) 450. The payload 450 may be provided by another computing device, such as a server or cloud computing environment 50. The payload 450 may be generated by another computing device before being provided to the system 400. The key 440 may also be provided by another computing device before being received by the system 400. The key 440 and the payload 450 may be stored in a secondary storage 420 of the system 400. The key 440 may include a set of one or more encrypted program attributes 442-1 and 442-2 (collectively 442). The set of encrypted program attributes 442 may be an encrypted sequence of characters (not shown) that includes the set of one or more program attributes. The set of program attributes may be references, pointers, or other associated program values. Payload 450 may include an unencrypted component 452 and a set of one or more encrypted components 454-1, 454-2, through 454-N (collectively 454). Payload 450 may be an executable file or archive. For example, payload 450 may be a binary file that is executable by processor 410 of system 400. In another example, payload 450 may be an executable archive that includes multiple files and folders (not shown) that are executed by processor 410.

[0063] The non-encrypted component 452 may be executable and responsive to one or more commands, inputs, requests, and the like. In particular, the non-encrypted component 452 may be configured as a loader program code (loader) configured to receive a program execution request. The loader 452 may be configured to execute other portions of the payload 450. The loader 452 may load other runtimes, libraries, code objects, and the like that are not encrypted, as examples. The loader 452 may further be configured to conditionally operate other portions of the payload 450. In particular, the loader 452 may only indirectly load or execute one or more of the encrypted components 454. Specifically, the loader 452 may only decrypt a single encrypted component of the set of encrypted components 454, and upon successful decryption, the now decrypted component of the set of encrypted components 454 may automatically start. Furthermore, to increase security, only certain encrypted components 454 may be decrypted by a key 440, and some encrypted components 454 may never be decrypted. For example, any program, component, or function (stored in a given encrypted component 454) that is not designated to be executed will not be decrypted by the non-encrypted component 452. In another example, any program, component, or function (stored in a given encrypted component 454) that does not have a corresponding encrypted permission 442 in a given key 440 will never be able to be decrypted by the non-encrypted component 452. In some situations, a different set of encryption attributes may be provided to other systems or other keys (other than the key 440). A different set of encryption attributes of another key may include program attributes that will allow execution of a particular encryption component 454. For example, if at a later point in time system 400 is provided with a new key that includes additional encryption attributes, execution of the first copy of payload 450 may permit execution of other programs, components, or functions stored in encryption component 454.

[0064] In a first example of operation, a first request 460 may be received by a processor 410 of the system 400. The processor 410 may receive the first request 460 and, in response, may execute a first instance 470 of the payload 450. The first payload instance 470 may include a first instance of a non-encrypted component 472 and a set of encrypted components 474-1, 474-2, through 474-N (collectively 474). The first request 460 may be directed to a first program of a set of encrypted programs in the set of encrypted components 474. The first request 460 may be an execution request for the first program. The first payload instance 470 may be further configured to verify the validity of the key 440 (e.g., by being provided the key 440 as an argument to the execution or by retrieving the key 440 in response to the first request 460). The requests 460 may be in the form of input from a user via a graphical user interface (e.g., a mouse click on a menu) or command line instructions. For example, a first request 460 may request that a program 474-1 named "TextTyper" be executed, targeting a payload 450 that is a Java JAR file named "mySoftware.jar" using a key 440 named "myLicense.key." The first request 460 may appear on the command line as ".java -jar mySoftware.jar -1 myLicense.key -t TextTyper."

[0065] Continuing with the first example of operations, upon receiving the request 460, the processor 410 may execute the first payload instance 470, and the loader 472 may decrypt the encryption component 474-1 using the key 440. The encryption attributes 442 of the key 440 may include an encrypted binary value that specifies which components the key can decrypt and a label that characterizes the protected functionality. The execution of the program 474-1 may be secured from observation by other parts of the system 410. In the first example, a homomorphic encryption technique may be employed. In a second example, the first payload instance 470 may be sandboxed from other processes executing in the primary storage 430. In another example, the encryption component 474 of the first payload instance 470 may include a first encrypted copy of a symmetric key (not shown), and the key 440 may also include a second encrypted copy of the symmetric key. Any encryption component 474 that does not receive a copy of the symmetric key encrypted in the key 440 may not be executed. As a result, a malicious program that intercepts the first instance of program 474-1 after decryption and while it is residing in primary storage 430 may not be able to create an executable copy unless it also has a copy of the symmetric key.

[0066] In a second example of operation, a second request 480 may be received by the processor 410. The processor 410 may receive the second request 480 and, in response, may execute a second instance 490 of the payload 450. The second payload instance 490 may include a second instance of a non-encrypted component 492 and a set of encrypted components 494-1, 494-2, through 494-N (collectively 494). The second request 480 may be directed to a second program of a set of encrypted programs in the set of encrypted components 494. Specifically, the second program may be encrypted in the encryption component 494-2. The second request 480 may further be accompanied by a key 440. The key 440 may have a set of encryption attributes, but may not have encryption attributes corresponding to the encryption component 494-2.

[0067] Continuing with the second example of operation, in response to the request, the decryption component 492 may attempt to effect execution of the second program of the request 480. The code of the decryption component 492 may not include any logic to locate or enforce access control and may not reveal any information about the encryption component 494. For example, the second request 480 may be for a program named "PicturePainter" and may further include a key 440. The encryption attribute 442 may correspond to a program that is not the "PicturePainter" program. The decryption component 492 may only include code to perform a decryption routine using the provided key. The code may not reveal the unencrypted data of any of the components. Based on this second example, all of the encryption component 494 may remain encrypted.

[0068] FIG. 5 illustrates an example method 500 of HESS performed by a client system according to some embodiments of the present disclosure. Method 500 may be performed by a computer, such as computer system 100. Method 500 may be performed in response to a user instructing the computer to execute secure software provided to the computer. For example, a memory stick may include a copy of a heterogeneous program payload (payload), such as payload 450. The computer performing method 500 may be connected to a network, such as the Internet. In some embodiments, method 500 may be performed on an air-gapped computer. By way of example, the computer performing method 500 may be separate from other computers, servers, etc., or may not otherwise be communicatively coupled directly (or indirectly via a network) to any other processing device.

[0069] The method 500 begins at 505 and a payload is executed at 510. The payload may be executed by receiving command line arguments to initiate execution of the program. The payload may be executed at 510 periodically, such as by a batch process or script on the computer.

[0070] A license key may be entered into the payload at 520. In some embodiments, the key may be entered as part of the execution of the payload at 510. For example, the license key may be a command line argument provided as part of the execution of the payload. In some embodiments, the key may be entered after the execution of the payload at 510. For example, the license key may be located locally on a storage device, in a logical folder, or other associated computing structure. When the payload 510 is executed, a non-encryption component, such as a validation and loading program, may initiate by requesting that a license key be provided. In response to the request for a license key, a user or program may enter the license key into the non-encryption component of the payload at 520.

[0071] A program execution instruction may be received at 530. The program execution instruction may be received by the payload 510. For example, the program execution instruction may be a selection from a script, a user, or other program to initiate execution of a first program. The program execution instruction may be received upon execution of the payload 510. For example, the program execution instruction may be arguments provided to the payload upon execution at 510. The program execution instruction may be directed to a portion of the payload. In particular, the program execution instruction may reference one or more programs stored in the set of encrypted components of the payload by program name or other associated identifier.

[0072] At 540, the validity of execution of the payload may be determined. The validity of execution may be the validity of the key entered at 520. The non-encrypting component of the payload may receive a license key and may attempt to execute a decryption process using the license key (e.g., using a symmetric algorithm such as AES or an asymmetric algorithm such as ABE). The validity of execution may be in response to the program execution instructions received at 530. The validity may be based on the license key and may also be based on the specific program instructions received at 530. Specifically, based on the license key entered at 520 and in combination with the program instructions received at 530, the non-encrypting component of the payload may begin by executing one or more decryption operations. The decryption operations may be performed for every encrypting component in the set of components. For example, the entire license key may be provided as an argument to the decryption process along with a plaintext identifier corresponding to the target encrypting component in the set of encrypting components. The validity determination may trigger a decryption action of the decryption process to attempt to decrypt the identified program stored in the encrypting component in the set of components. The decryption process may attempt to perform a decryption action using each cryptographic attribute present in the license key. For example, a given license key may be a string of values ​​representing 45 cryptographic attributes corresponding to 45 programs that may be executed by a corresponding heterogeneous program payload. The corresponding payload may include 70 programs stored in 70 separate cryptographic components. If one of the 45 cryptographic attributes corresponds to a cryptographically matching cryptographic component, the decryption process may decrypt only the program requested from the received program execution instruction at 530. The decryption process may be configured to receive the entire key without revealing any particular program attributes corresponding to the programs stored in the cryptographic components.For example, the decryption process may not reveal any unencrypted versions of the encrypted attributes, and may not indicate, provide as output, or provide as an observable intermediate (e.g., in primary storage, memory, or processor registers) any unencrypted form of the encrypted attributes that constitute the license key.

[0073] If the validity is determined to be valid, 550:Y, then the decryption program may be loaded at 560. The decryption program 560 may be the only program loaded. In other words, any encryption components that are not the requested program are not decrypted at 560. The decryption program 560 may be loaded securely. For example, the processor may allocate a secure (e.g., sandboxed and private) portion of RAM or cache to hold the decryption program during execution.

[0074] If the validity is determined to be invalid at 550:N, the received program execution command is rejected at 570. The rejection at 570 may be an instruction, output, or other message indicating the rejection. For example, a message may be generated stating "program has no access permissions" to the file. In another example, a message may be generated to the computer's output or screen buffer stating "invalid input." The rejection at 570 may include a program termination of the non-encrypted components of the heterogeneous program payload without communicating any reason for the program termination.

[0075] After the validity is determined to be valid at 550:Y or after the validity is determined to be invalid at 550:N, the method 500 ends at 595.

[0076] 6 illustrates an example method 600 for creating components of a HESS for provision to client systems, according to some embodiments of the present disclosure. Method 600 may be performed by a central computer, such as computer 100. Method 600 may be performed by a cloud provider, such as cloud computing environment 50. Method 600 may be performed by a software creator prior to distributing or otherwise providing the software. For example, method 600 may be performed as part of an integrated development environment to generate a new version of the software to fix bugs or to enhance or create new features.

[0077] From the start 605, a request may be received at 610. The request may be entered as part of a script to generate software or generate a license for the software. The request at 610 may include one or more parameters, such as build information, software version information, license name, client name, license permission, or other relevant parameters. The request at 610 may include a reference to the unsecured software. For example, the request may include a pointer to the location of one or more sets of programs in an unencrypted format stored as part of a binary, or as source code functions, or as one or more files or folders in a software archive file, or both.

[0078] If the request at 620:Y is for a new payload, then a set of one or more program attributes may be assigned at 630. Assigning attributes may include assigning a single attribute to all programs of the software that are part of the payload. Specifically, if a given piece of software has 135 separate programs, then 135 program attributes may be assigned to each separate program. For example, if a developer is generating a new payload for distribution that contains four separate programs, then attributes "F1", "F2", "F3", and "F4" may be assigned to the first program, the second program, the third program, and the fourth program, respectively.

[0079] At 640, a heterogeneous program payload may be generated. The program may be generated based on a first encryption process. The first encryption process may include execution of an encryption algorithm to generate a heterogeneous program payload. For example, the payload could be encrypted with a symmetric encryption algorithm, such as AES-128 or a larger key length, or with an asymmetric encryption algorithm, such as RSA-2048 or ECDSA-224 or a larger key length, or with an attribute-based encryption scheme, such as KP-ABE or CP-ABE. The first encryption process may take three inputs in any order. The first encryption process may take as a first input the unsecured payload that was part of the request (received at 610). The first encryption process may take as a second input the assigned program attributes. The first encryption process may take as a third input a primary key. The primary key may be a key, value, string, or other series of words or characters of sufficient length (e.g., 1024 bits).

[0080] If one or more of the inputs are incomplete or missing, the first encryption process may issue an error or return an error code. For example, if the unsecured payload includes four programs and the first encryption process is given only three program attributes, the first encryption process may return an error. As part of generating the heterogeneous program payload, a set of one or more encrypted components may be generated (e.g., as a result or output of the first encryption process). As part of generating the heterogeneous program payload, the unsecured components may be combined with the encrypted components at 640 (e.g., substantially simultaneously with, immediately prior to, or shortly after the first encryption process creates the set of encrypted components). The unencrypted components may be combined with the set of encrypted components by compiling, grouping, archiving, embedding, or otherwise combining the unencrypted components with the set of encrypted components. The unencrypted components may be an output of the first encryption process. As an example, a decryption process may be generated as one output of the first encryption process. The decryption process may take as input one or more of the program attributes, such as a subset of the program attributes (eg, in encrypted form).

[0081] If the request at 620:N is not for a new payload, and if the request at 650:Y is for a new key, then one or more permissions for the key may be received at 660. The request for a new key (received at 610) may include one or more permissions, references, values, or associated identifiers of programs that are permitted to be executed by the given heterogeneous program payload, and a reference to the given heterogeneous program payload. The one or more permissions may be an instance or a first subset of a set of program attributes. For example, the entire set of program attributes may include 35 program attributes corresponding to each program stored (in encrypted form) in the heterogeneous program payload. Continuing with the example, the received permission may include a subset of the program attributes including a third program attribute, a twelfth program attribute, and a thirtieth program attribute. A random value may then be obtained at 670. The random value may be a random string of characters. The random value may be a random series of words. The random value may be of sufficient length or size (eg, 256 bits).

[0082] The license key is generated at 680. The license key may be generated by a second encryption process. The second encryption process may be any suitable encryption process. The second encryption process may include three inputs. The first input may be a subset of program attributes (e.g., program attributes corresponding to a program for which access to execution is permitted by the generated license key). The second input may be a random value. The third input may be a primary key. The output of the second encryption process may be the license key. The license key may be a series of values, a string of characters, or other related encrypted output. The license key may include a set of encrypted program attributes corresponding to a subset of the encrypted components of a heterogeneous program payload that is permitted to be decrypted for execution. The license key may not clarify, distinguish, or otherwise indicate where the first encryption program attributes end and where the second encryption program attributes end. The use of a random value can prevent the encryption program attributes from being identified by comparing two keys. For example, given a first subset of program attributes, and a first random number, and a primary key, the license key generated at 680 may be a string with the value of "skZIE”8’wBtbye-7[$$p7uNM2HLi>NZg0rA YFO<jh!X {QQ=Oyrb#s<R-+8%h,X". As a continuation of this example, given the same first subset of program attributes, and a second random number, and a primary key, the license key generated at 680 may be a string with the value of "HF,FQLb]46,xA / d?”.QCd, ?#sm.v:CT / xT(Oo<4BxE&LfThZ8*Azp(C?_nPA".

[0083] If the request at 650:N is not for a new key, or after generating the license key at 680, method 600 ends at 695.

[0084] The present invention may be embodied as a system, method, or computer program product, or any combination thereof, integrated at any possible level of technical detail. The computer program product may include one or more computer readable storage media having computer readable program instructions that cause a processor to perform aspects of the present invention.

[0085] A computer readable storage medium may be any tangible device capable of holding 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 of the foregoing. A non-exhaustive list of more specific examples of computer readable storage media 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 disc 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 in which the instructions are recorded, and any suitable combination of the foregoing. As used herein, computer-readable storage media should not be interpreted as signals that are transitory in nature, such as electric waves or other freely propagating electromagnetic waves, electromagnetic waves propagating through a waveguide or other transmission medium (e.g., light pulses passing through a fiber optic cable), or electrical signals transmitted over wires.

[0086] The computer readable program instructions described herein can be downloaded from the computer readable storage medium to the respective computing / processing device or to an external computer or external storage device via a network, such as the Internet, a local area network, a wide area network, or a wireless network, or any combination thereof. The network can include copper transmission cables, optical transmission fiber, wireless transmission, routers, firewalls, switches, gateway computers, or edge servers, or any combination thereof. A network adapter card or network interface of each computing / processing device receives the computer readable program instructions from the network and transfers the computer readable program instructions for storage on the computer readable storage medium within the respective computing / processing device.

[0087] The computer readable program instructions for carrying out the operations of the present invention may be either source code 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 configuration data, integrated circuit configuration data, or object-oriented programming languages ​​such as Smalltalk, C++, or the like, and procedural programming languages ​​such as the "C" programming language or similar. 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 scenario, the remote computer may be connected to the user's computer through any type of network, including a local area network (LAN) or a wide area network (WAN), or may be connected to an external computer (e.g., via the Internet using an Internet Service Provider). In some embodiments, electronic circuitry, including by way of example programmable logic circuitry, a field-programmable gate array (FPGA), or a programmable logic array (PLA), may execute computer-readable program instructions by utilizing state information of the computer-readable program instructions to personalize the electronic circuitry to perform aspects of the invention.

[0088] Aspects of the present invention are described herein with reference to flowchart illustrations and / or block diagrams of 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.

[0089] Such computer readable program instructions may be provided to a processor of a computer or other programmable data processing apparatus such that the instructions are executed by the processor of the computer or other programmable data processing apparatus to produce means for implementing the functions / operations specified in one or more blocks of the flowcharts and / or block diagrams. The computer readable program instructions, which may direct a computer, programmable data processing apparatus, or other device, or any combination thereof, to function in a particular manner, may also be stored on a computer readable storage medium such that the computer readable storage medium having the instructions stored thereon comprises an article of manufacture including instructions for implementing each aspect of the functions / operations specified in one or more blocks of the flowcharts and / or block diagrams.

[0090] Furthermore, the computer readable program instructions may be loaded into a computer, other programmable data processing apparatus, or other device to cause a sequence of operational steps to be performed on the computer, other programmable apparatus, or other device to result in a computer-implemented process, such that the instructions executing 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.

[0091] 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 that includes one or more executable instructions that implement the specified logical function(s). In some alternative implementations, the functions shown in the blocks may occur in a different order than that shown in the figures. For example, depending on the functionality involved, two blocks shown in succession may actually be realized as a single step, may be executed simultaneously, may be executed substantially simultaneously, may be partially or fully overlapped in time, or the blocks may be executed in reverse order. Furthermore, it should be noted that each block of the block diagrams and / or flowchart illustrations, and combinations of multiple blocks in the block diagrams and / or flowchart illustrations, may be implemented by a dedicated hardware-based system that performs the specified functions or operations or executes a combination of dedicated hardware and computer instructions.

[0092] The description of various embodiments of the present disclosure is presented for illustrative purposes, but is not intended to be exhaustive or limited to the disclosed embodiments. Numerous modifications and variations will be apparent to those skilled in the art without departing from the scope of the described embodiments. The terminology used in the present specification has been selected to explain the principles, practical applications, or technical improvements of the embodiments compared to the art on the market, or to allow those skilled in the art to understand the embodiments disclosed in the present specification.

[0093] The description of various embodiments of the present disclosure is presented for illustrative purposes, but is not intended to be exhaustive or limited to the disclosed embodiments. Numerous modifications and variations will be apparent to those skilled in the art without departing from the scope of the described embodiments. The terminology used in the present specification has been selected to explain the principles, practical applications, or technical improvements of the embodiments compared to the art on the market, or to allow those skilled in the art to understand the embodiments disclosed in the present specification.

Claims

1. Providing a first copy of the heterogeneous program payload to a first computing device. A method comprising: the heterogeneous program payload includes an unencrypted component and a set of a plurality of encrypted components, the set of a plurality of encrypted components corresponding to a set of a plurality of programs; the non-encrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key; the loader program code is configured to, in response to receiving the first license key, perform a decryption action on the set of the plurality of encrypted components of the heterogeneous program payload, a result of performing the decryption action being dependent on encrypted program attributes in the first license key, the method further comprising: generating, by a second computing device, a first license key based on a first encryption process using a primary key corresponding to the heterogeneous program payload and a first subset of a set of a plurality of program attributes corresponding to the set of a plurality of programs, the first license key including a first set of one or more encrypted program attributes corresponding to a first subset of the set of a plurality of encrypted components; A method comprising:

2. The method comprises: generating, by the second computing device, from the set of programs, the heterogeneous program payload including the unencrypted component and the set of encrypted components based on a second encryption process using the primary key and the set of program attributes. The method of claim 1 further comprising:

3. 3. The method of claim 1 or 2, wherein a first cryptographic component of the set of multiple cryptographic components is a first program and a second cryptographic component of the set of multiple cryptographic components is a function of the first program.

4. The method comprises: Providing the first license key to the first computing device. Further comprising:

3. The method of claim 1, wherein the first license key includes a first set of the one or more encryption program attributes that correspond to the first subset of the set of the plurality of encryption components.

5. The loader program code comprises:

5. The method of claim 4, further comprising receiving a first program execution instruction directed to a first program that has been encrypted in a first encryption component of the set of multiple encryption components.

6. The decryption action: determining whether the first license key is invalid by the loader program code; rejecting, by said loader program code, said first program execution instruction in response to said illegality; The method of claim 5 , comprising:

7. The decryption action: determining the validity of the first license key by the loader program code; loading, by said loader program code, said first program into memory for execution by a processor based on said first program execution instructions in response to validity of said first license key; The method of claim 5 , comprising:

8. The method comprises: providing a second license key to a third computing device, the second license key includes a second set of one or more encryption program attributes corresponding to the first subset of the set of the plurality of encryption components; the second set of one or more encrypted program attributes is not the same as the first subset of the one or more encrypted program attributes. providing the second license key; providing a second copy of the heterogeneous program payload to the third computing device; The method of claim 7 further comprising:

9. the loader program code of the second copy of the heterogeneous program payload further comprising: receiving a second program execution instruction targeted to the first program encrypted in the first encryption component of the set of multiple encryption components of the second copy of the heterogeneous program payload; receiving the second license key; determining a second inauthenticity of the second license key; and in response to the second illegality, rejecting the second program execution instruction; The method of claim 8 , configured to:

10. the loader program code of the second copy of the heterogeneous program payload further comprising: receiving a second program execution instruction targeted to the first program encrypted in the first encryption component of the set of multiple encryption components of the second copy of the heterogeneous program payload; receiving the second license key; determining the validity of the second license key; loading the first program into memory for execution by a processor based on the second program execution instructions in response to validity of the second license key; The method of claim 8 , configured to:

11. Providing a first copy of a heterogeneous program payload to a first computing device. A method comprising: the heterogeneous program payload includes an unencrypted component and a set of one or more encrypted components, the set of encrypted components corresponding to a set of one or more programs; the non-encrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key; The loader program code is configured to perform a decryption action on the set of encrypted components of the heterogeneous program payload in response to receiving the first license key, and the method further comprises: assigning, by a second computing device, a set of one or more program attributes corresponding to the set of programs, each program attribute in the set of program attributes identifying a corresponding respective program in the set of programs; generating, by the second computing device, from the set of programs based on a first encryption process using a primary key and the set of program attributes, the heterogeneous program payload including the unencrypted components and the set of encrypted components, the heterogeneous program payload being generated prior to providing to the first computing device; The method further comprises: generating, by the second computing device, the first license key based on a second encryption process using the primary key, using a random string of characters, and using a first subset of the set of program attributes, the first license key including a first set of one or more encrypted program attributes corresponding to a first subset of the set of encrypted components; The method further comprising:

12. the first subset of the set of program attributes is the same as the set of program attributes; The method of claim 11 , wherein the first subset of the set of cryptographic components is the same as the set of cryptographic components.

13. a memory containing one or more instructions; a processor communicatively coupled to the memory; wherein the processor is configured to provide a first copy of a heterogeneous program payload to a first computing device in response to reading the one or more instructions; the heterogeneous program payload includes an unencrypted component and a set of a plurality of encrypted components, the set of a plurality of encrypted components corresponding to a set of a plurality of programs; the non-encrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key; the loader program code is configured to, in response to receiving the first license key, perform a decryption action on the set of the plurality of encrypted components of the heterogeneous program payload, a result of performing the decryption action being dependent on encrypted program attributes in the first license key, and the processor further comprises:

11. A system configured to generate a first license key based on a first encryption process using a primary key corresponding to the heterogeneous program payload and a first subset of a set of a plurality of program attributes corresponding to the set of a plurality of programs, the first license key including a first set of one or more encrypted program attributes corresponding to a first subset of the set of a plurality of encrypted components.

14. The processor, 14. The system of claim 13, further configured to generate the heterogeneous program payload comprising the unencrypted component and the set of encrypted components from the set of programs based on a second encryption process using the primary key and the set of program attributes.

15. The loader program code comprises:

15. The system of claim 14, further configured to receive a first program execution instruction directed to a first program that is encrypted in a first component of the set of multiple encryption components.

16. The decryption action: determining whether the first license key is invalid by the loader program code; rejecting the first program execution instruction in response to the illegality by the loader program code. The system of claim 15 , comprising:

17. On the computer, 1. A computer program product for causing a first computing device to perform a first copy of a heterogeneous program payload, the computer program product comprising: the heterogeneous program payload includes an unencrypted component and a set of a plurality of encrypted components, the set of a plurality of encrypted components corresponding to a set of a plurality of programs; the non-encrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key; The loader program code is configured to, in response to receiving the first license key, perform a decryption action on the set of encrypted components of the heterogeneous program payload, a result of performing the decryption action being dependent on encrypted program attributes in the first license key, and the computer program further comprises:

1. A computer program product that causes a program to execute: generating a first license key based on a first encryption process using a primary key corresponding to the heterogeneous program payload and a first subset of a set of a plurality of program attributes corresponding to the set of a plurality of programs, the first license key including a first set of one or more encrypted program attributes corresponding to a first subset of the set of a plurality of encrypted components.

18. The computer includes: generating the heterogeneous program payload, the heterogeneous program payload including the unencrypted component and the set of the encrypted components, from the set of the programs based on a second encryption process using the primary key and the set of the program attributes.

20. The computer program product of claim 17, further comprising:

19. A computer comprising:

1. A computer program product for causing a first computing device to perform a first copy of a heterogeneous program payload, the computer program product comprising: the heterogeneous program payload includes an unencrypted component and a set of one or more encrypted components, the set of encrypted components corresponding to a set of one or more programs; the non-encrypted component of the heterogeneous program payload includes loader program code configured to receive a first license key; The loader program code is configured to perform a decryption action on the set of encrypted components of the heterogeneous program payload in response to receiving the first license key, and the computer program code is configured to cause the computer to: assigning a set of one or more program attributes corresponding to the set of programs, each program attribute in the set of program attributes identifying a corresponding respective program in the set of programs; generating, from the set of programs, the heterogeneous program payload including the unencrypted components and the set of encrypted components based on a first encryption process using a primary key and the set of program attributes, the heterogeneous program payload being generated prior to providing the heterogeneous program payload to the first computing device; generating the first license key based on a second encryption process using the primary key, using a random string of characters, and using a first subset of one or more program attributes of the set of program attributes, the first license key including a first set of one or more encrypted program attributes corresponding to a first subset of the set of encrypted components; A computer program that further executes the above.

20. the first subset of the set of program attributes is the same as the set of program attributes; 20. The computer program product of claim 19, wherein the first subset of the set of cryptographic components is the same as the set of cryptographic components.

Citation Information

Patent Citations

  • Electronic information distribution method and recording medium

    JP1999039262A

  • File control program, file transmission program, file transmission device, file control method, and file transmission method

    JP2010238212A

  • Method for providing and authenticating application software, and system therefor

    JP2018180854A

  • System for controlling the use of licensed software

    US6460140B1