# Patent

## Title
Secure storage for shared documents

## Abstract

Embodiments are directed towards managing data storage for secure storage of shared documents. A user or an application may provide data destined for encryption and a public key. Instruction set information that references at least a seed file that may be installed on the network computer may be generated. An encryption key based on the instruction set information may be generated. Header information that includes the instruction set may be generated. And, the header information may be encrypted using the public key. A secure bundle that includes the public key, the encrypted header information, and the encrypted data may be generated and provided to the user that provided the data and the public key or the application that provided the data and the public key. Decrypting the data included in the secure bundle the above actions are generally performed in reverse.

## Background
CROSS-REFERENCE TO RELATED APPLICATION(S)
This Utility patent application is a Continuation of U.S. patent application Ser. No. 14/815,806 filed on Jul. 31, 2015, now U.S. Pat. No. 9,298,940 issued on Mar. 29, 2016, which is based on U.S. Provisional Patent Application No. 62/102,942 filed on Jan. 13, 2015, the benefits of which are claimed under 35 U.S.C. §120 and §119(e), and which are both further incorporated by reference in their entireties.


TECHNICAL FIELD
The invention relates generally to communication over computer networks, and more particularly, but not exclusively to secure storage for shared documents in a networked environment.
BACKGROUND
More and more service providers are moving their applications onto distributed networked environments, such as public or private cloud environments. Likewise, clients of these distributed applications have an expectation of ubiquitous access to applications from a variety of different mobile or non-mobile client computers and devices. Accordingly, the information security applications for applications hosted in distributed network environments and/or cloud computing environments may be expected to protect communications originating from a wide variety of devices, unexpected/unplanned locations, or the like. Accordingly, users and companies generating many digital documents that may be stored on network accessible storages, As individuals and companies increasing rely on computer networks, such as the internet, for document storage, the threat of malicious and/or unauthorized access to sensitive information also increases. Large scale attacks that steal electronically stored documents can cause significant damage and embarrassment to companies relying on such documents to be accessible over the internet or other computer networks. Thus, it is with respect to these considerations and others that the subject innovations have been made.



BRIEF DESCRIPTION OF THE DRAWINGS
Non-limiting and non-exhaustive embodiments of the present innovations are described with reference to the following drawings. In the drawings, like reference numerals refer to like parts throughout the various figures unless otherwise specified. For a better understanding of the described innovations, reference will be made to the following Description of Various Embodiments, which is to be read in association with the accompanying drawings, wherein:
FIG. 1 is a system diagram of an environment in which embodiments of the invention may be implemented;
FIG. 2 shows an embodiment of a client computer that may be included in a system such as that shown in FIG. 1;
FIG. 3 shows an embodiment of a network computer that may be included in a system such as that shown in FIG. 1;
FIG. 4 shows an overview of architecture of a secure networking system in accordance with at least one of the various embodiments;
FIGS. 5A-5B show registration processes employed by a system in accordance with at least one of the various embodiments;
FIGS. 6A-6B show a session key (TRX Key) generation processes performed by a system that is in accordance with at least one of the various embodiments;
FIG. 7 shows an overview flowchart of a process that secures communications in accordance with at least one of the various embodiments;
FIG. 8 shows a flowchart of a process that registers a client security application with a security server application in accordance with at least one of the various embodiments;
FIG. 9A shows a flowchart of a process that conducts a communication session between a client security application and a security application server in accordance with at least one of the various embodiments;
FIG. 9B shows a flowchart of a process that conducts a communication session between a client security application and a security server application in accordance with at least one of the various embodiments;
FIG. 10 shows a flowchart of a process that generates an encryption key from an instruction set in accordance with at least one of the various embodiments;
FIG. 11 shows a flowchart of a process that performs key generation during encryption of data in accordance with at least one of the various embodiments;
FIG. 12 shows a flowchart of a process for key generation during decryption of data in accordance with at least one of the various embodiments;
FIG. 13 shows an overview of architecture for of secure storage of shared documents in accordance with at least one of the various embodiments;
FIG. 14A-14C illustrates logical representations a security bundle and some of its constituent components in accordance with at least one of the various embodiments;
FIG. 15 illustrates an overview flowchart for a process for encrypting data for secure storage of shared documents in accordance with at least one of the various embodiments;
FIG. 16 illustrates a flowchart for a process for decrypting data that may be included in secure bundle for secure storage of shared documents in accordance with at least one of the various embodiments;
FIG. 17 shows a flowchart of a process to secure data using a secure storage application in accordance with at least one of the various embodiments; and
FIG. 18 shows a flowchart of a process that loads encrypted data from data storage using a secure storage application in accordance with at least one of the various embodiments.



DETAILED DESCRIPTION OF VARIOUS EMBODIMENTS
The present innovations now will be described more fully hereinafter with reference to the accompanying drawings, which form a part hereof, and which show, by way of illustration, specific embodiments by which the invention may be practiced. These innovations may, however, be embodied in many different forms and should not be construed as limited to the embodiments set forth herein; rather, these embodiments are provided so that this disclosure will be thorough and complete, and will fully convey the scope of the invention to those skilled in the art. Among other things, the present innovations may be embodied as methods, computers, or devices. Accordingly, the present innovations may take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment combining software and hardware aspects. The following detailed description is, therefore, not to be taken in a limiting sense.
Throughout the specification and claims, the following terms take the meanings explicitly associated herein, unless the context clearly dictates otherwise. The phrase “In one of the embodiments” or “in at least one of the various embodiments” as used herein does not necessarily refer to the same embodiment, though it may. Furthermore, the phrase “in another embodiment” as used herein does not necessarily refer to a different embodiment, although it may. Thus, as described below, various embodiments of the innovations may be readily combined, without departing from the scope or spirit of the innovations.
In addition, as used herein, the term “or” is an inclusive “or” operator, and is equivalent to the term “and/or,” unless the context clearly dictates otherwise. The term “based on” is not exclusive and allows for being based on additional factors not described, unless the context clearly dictates otherwise. In addition, throughout the specification, the meaning of “a,” “an,” and “the” include plural references. The meaning of “in” includes “in” and “on.”
As used herein the term “cloud network” refers to cloud based networked computing environments that usually enable location transparent access to services and/or applications. Cloud networks may be comprised of one or more physical network computers. These physical network computers may be coupled using one or more networks and/or arranged into clusters. In some cases, users may access cloud networks over public networks, such as, the internet. Cloud networks generally made available to the public are sometimes called public cloud networks. In other cases, access to a cloud network may be restricted. This type of cloud network configuration may be called a private cloud network.
Cloud networks may comprise numerous physical computers and storage devices arranged such that the number and arrangement of the physical computers and devices is hidden from the users of a cloud network. Cloud network infrastructure, the details and architecture of which may vary depending on the cloud network provider, automatically provision and deploy applications and services onto the physical hardware transparent to the users of cloud services.
As used herein the term “cloud instance” refers to an addressable (identifiable) and distinct allocation of computing resources in a cloud network. In many embodiments, cloud instances are virtual servers implemented using one or more virtual machine technologies. In some embodiments, cloud instances may be optimized for particular computing tasks.
As used herein the term “credentials” refers to information that is used for unambiguous identification of entities or items in a network. In some embodiments, cryptographic techniques may be employed to generate credentials for establishing the identity of parties that are in communication over a network, including, users, client computers, server computers, or the like. In at least one of the various embodiments, credentials may comprise machine-readable cryptographic keys, passwords, certificates, public key/private keys, or the like. In at least one of the various embodiments, credentials may be self-issued, or issued by a trusted third party. For example, an X.509 certificate and a corresponding private key is a credential that may be generated using well-known cryptographic techniques.
As used herein the term “seed file” refers to unencrypted data that is preselected for use during compression and encryption operations. Seed files include data that may be processed and used for preloading a work space buffer used during codec operations, such as, compression, cryptographic operations, or the like, or combination thereof. In at least one of the various embodiments, seed files may be selected to include data that may optimize the codec operations for a particular type of data. For example, if source data is determined to be HTML, a particular seed file may include data that improves the initial performance of codec operations performed on the source data. Seed files may be various sizes, such as, 1K-10 Kbytes, or more, depending on the particular implementation.
As used herein the term “instruction set,” and “instruction set information” refer to information that may be communicated from a security application server on a server computer to a client security application on a client computer. Instruction information may include a seed file identifier, an offset value, a length value, and optionally a range of port numbers. In some embodiments, the instruction set information may employed by a security application (both client and servers) to extract a pass phrase from a seed file. The extracted pass phrase may be employed by a security application to generate a cryptographic key.
As used herein the term “hardware security module” refers to a hardware device or computer arranged for providing additional safeguards for storing and using security/cryptographic information such as, keys, digital certificates, passwords, passphrases, two-factor authentication information, personal identification numbers, or the like. In some embodiments, hardware security modules may be employed to support one or more standard public key infrastructures (PKI), and may be employed to generate, manage, and/or store keys pairs, or the like. In some embodiments, hardware security modules may be arranged and/or configured as stand-alone network computers, in other cases, they may be arranged as hardware cards that may be added to a computer. Further, in some cases, hardware security modules may be arranged as a portable computer, and/or incorporated into client computers.
As used herein the terms, “encryption,” and “decryption,” refer to cryptographic operations that may be performed on message data. Generally, encryption may refer to one or more cryptographic operations that may be performed on data to secure it for transmission and/or storage. In some cases, data may be encoded using public key/private key cryptography. In other cases, cryptographic operations may employ symmetric keys. Further, in some embodiments, data operations such as compression/decompression may be employed before and/or simultaneously while data is encrypted or decrypted. Accordingly, herein it is assumed that encryption, decryption, and cryptographic operations may include one or more additional steps such as compression, decompression, data padding, data seeding, or the like, or combination thereof.
As used herein the term “transport key” as used herein is a cryptographic key used for symmetric encryption that is generated by a security application based on instruction set information. The transport key is used in cryptographic operations to encrypt and/or decrypt information communicated between two endpoints.
As used herein the term “encryption key” as used herein is a cryptographic key used for symmetric encryption that is generated by a security application and/or secure storage application based on instruction set information. The encryption key is used in cryptographic operations to encrypt and/or decrypt data for secure storage.
As used herein the terms “cache values,” “seed values,” or “working set values” refer to values generated by the operation of a stream cipher encryption engine. In some stream ciphers the cache values are used as part of the encryption process. Accordingly, the cache of the encryption must be seeded with the correct cache values to invert (decrypt) the process of encryption.
The following briefly describes the embodiments of the invention in order to provide a basic understanding of some aspects of the invention. This brief description is not intended as an extensive overview. It is not intended to identify key or critical elements, or to delineate or otherwise narrow the scope. Its purpose is merely to present some concepts in a simplified form as a prelude to the more detailed description that is presented later.
Briefly stated, embodiments are directed towards seeded cryptography and compression for data transport and storage. In at least one of the various embodiments, the client applications and server application may be installed with client security application and security application servers, respectively. The client application and server application may employ the client security application and the security application server to communicate over a network.
In at least one of the various embodiments, the client security application may register with a security application server using one or more cryptographic credentials. Upon successful registration the client security application and security application server may conduct cryptographically secure communication over the network.
In at least one of the various embodiments, at the beginning of each secure cryptographic communication session the client security application and the security application server may exchange instruction sets that are used to generate an initial transport key that may enable the two security applications to conduct secure communications. In at least one of the various embodiments, the instruction set information may at least include information for determining a pass phrase from one or more preinstalled seed files, copies of which are present on each security application (e.g. both the client and server).
In at least one of the various embodiments, during cryptographic operations a workspace memory may be filled deliberately and/or as a by-product of a compression operation. Accordingly, the information in the workspace may be employed to generate a new transport key for encrypting (or decrypting) the next portion of the data.
In at least one of the various embodiments, data that is encrypted for storage (e.g., as a file or in a database) may be bundled with a separately encrypted copy of the instruction set that was used to generate the initial transport key used for encrypting the data. Accordingly, if the encrypted bundle is retrieved from storage, the original initial transport key may be regenerated from the instruction set information that was bundled with the stored encrypted data.
Furthermore, in at least one of the various embodiments, embodiments may be directed towards managing data storage using one or more network computers that perform actions for secure storage of shared documents.
In at least one of the various embodiments, a user or an application may provide data destined for encryption and a public key to a secure storage application that is running on a network computer. In at least one of the various embodiments, instruction set information that references at least a seed file that may be installed on the network computer may be generated.
In at least one of the various embodiments, an encryption key based on the instruction set information may be generated. In at least one of the various embodiments, generating the encryption key, may include: determining the seed file from a plurality of seed files based on an identifier that is included in the instruction set information; extracting a pass phrase from the seed file based on an offset value and a length value that are included in the instruction set information; and generating the encryption key based on the pass phrase that is extracted from the seed file. Further, in at least one of the various embodiments, generating the encryption key may further comprise employing a sensor to introduce entropy. In at least one of the various embodiments, an encryption engine may be employed to encrypt the data using the encryption key.
In at least one of the various embodiments, header information that includes the instruction set may be generated. And, the header information may be encrypted using the public key. In at least one of the various embodiments, generating the header information may include adding one or more cache values generated by the encryption engine to the header information. In at least one of the various embodiments, the header information may be modified include to a seed file that corresponds to the instruction set information.
In at least one of the various embodiments, a secure bundle that includes the public key, the encrypted header information, and the encrypted data may be generated and provided to the user that provided the data and the public key or the application that provided the data and the public key.
In at least one of the various embodiments, for decrypting the data included in the secure bundle the above actions are generally performed in reverse. Accordingly, in at least one of the various embodiments, the secure bundle and a private key may be provided to the secure storage application by a user or an application. In at least one of the various embodiments, the encrypted header information included in the secure bundle may be decrypted using that private key. In at least one of the various embodiments, the instruction set information included in the decrypted header information may be accessed. Accordingly, the encryption key may be generated based on the instruction set information. And, in at least one of the various embodiments, the encrypted data that may be included in the secure bundle may be decrypted using the encryption key and provided to the user that provided the secure bundle and the private key or the application that provided the secure bundle and the private key.
In at least one of the various embodiments, another public key from another user or another application may be provided. In at least one of the various embodiments, additional encrypted header information may be generated using the other public key and the header information. And, in at least one of the various embodiments, the other public key and the additional encrypted header information may be included in the secure bundle.
In at least one of the various embodiments, a common public key may be provided and used to encrypt header information. In at least one of the various embodiments, using a common public key may enable two or more users or two or more applications to decrypt the encrypted header information using a common private key that corresponds to the common public key.
Illustrative Operating Environment
FIG. 1 shows components of one embodiment of an environment in which embodiments of the invention may be practiced. Not all of the components may be required to practice the invention, and variations in the arrangement and type of the components may be made without departing from the spirit or scope of the invention. As shown, system 100 of FIG. 1 includes local area networks (LANs)/wide area networks (WANs)—(network) 110, wireless network 108, one or more cloud networks, such as, cloud network 112, one or more cloud instances, such as cloud instances 114, client computers 102-105, and Application Server Computer 116.
At least one embodiment of client computers 102-105 is described in more detail below in conjunction with FIG. 2. In one embodiment, at least some of client computers 102-105 may operate over one or more wired and/or wireless networks, such as networks 108, 110, and/or 112. Generally, client computers 102-105 may include virtually any computer capable of communicating over a network to send and receive information, perform various online activities, offline actions, or the like. In one embodiment, one or more of client computers 102-105 may be configured to operate within a business or other entity to perform a variety of services for the business or other entity. For example, client computers 102-105 may be configured to operate as a web server, firewall, client application, media player, mobile telephone, game console, desktop computer, kiosk, point-of-sale, or the like. However, client computers 102-105 are not constrained to these services and may also be employed, for example, as for end-user computing in other embodiments. It should be recognized that more or less client computers (as shown in FIG. 1) may be included within a system such as described herein, and embodiments are therefore not constrained by the number or type of client computers employed.
Computers that may operate as client computer 102 may include computers that typically connect using a wired or wireless communications medium such as personal computers, multiprocessor systems, microprocessor-based or programmable electronic devices, network PCs, or the like. In some embodiments, client computers 102-105 may include virtually any portable computer capable of connecting to another computer and receiving information such as, laptop computer 103, mobile computer 104, tablet computers 105, or the like. However, portable computers are not so limited and may also include other portable computers such as cellular telephones, display pagers, radio frequency (RF) devices, infrared (IR) devices, Personal Digital Assistants (PDAs), handheld computers, wearable computers, integrated devices combining one or more of the preceding computers, or the like. As such, client computers 102-105 typically range widely in terms of capabilities and features. Moreover, client computers 102-105 may access various computing applications, including a browser, or other web-based application.
A client computer may include a browser application that is configured to receive and to send web pages, web-based messages, and the like. The browser application may be configured to receive and display graphics, text, multimedia, and the like, employing virtually any web-based language, including a wireless application protocol messages (WAP), and the like. In one embodiment, the browser application is enabled to employ Handheld Device Markup Language (HDML), Wireless Markup Language (WML), WMLScript, JavaScript, Standard Generalized Markup Language (SGML), HyperText Markup Language (HTML), eXtensible Markup Language (XML), JavaScript Object Notation (JSON), or the like, to display and send a message. In one embodiment, a user of the client computer may employ the browser application to perform various activities over a network (online). However, one or more other applications may also be used to perform various online activities.
Client computers 102-105 also may include at least one other client application that is configured to receive and/or send content between another computer. The client application may include a capability to send and/or receive content, or the like. The client application may further provide information that identifies itself, including a type, capability, name, and the like. In one embodiment, client computers 102-105 may uniquely identify themselves through any of a variety of mechanisms, including an Internet Protocol (IP) address, a phone number, Mobile Identification Number (MIN), media access control address (MAC address), an electronic serial number (ESN), operating system generated hardware identifier, or other device identifier. Such information may be provided in a network packet, or the like, sent between other client computers, application server computer 116, or other computers.
Client computers 102-105 may further be configured to include a client application that enables an end-user to log into an end-user account that may be managed by another computer, such as application server computer 116, cloud instances 114, or the like. Such an end-user account, in one non-limiting example, may be configured to enable the end-user to manage one or more online activities, including in one non-limiting example, search activities, social networking activities, browse various websites, communicate with other users, perform one or more financial activities, online banking, online investment management, or the like. However, participation in such online activities may also be performed without logging into the end-user account.
Wireless network 108 is configured to couple client computers 103-105 and its components with network 110 and/or cloud network 112. Wireless network 108 may include any of a variety of wireless sub-networks that may further overlay stand-alone ad-hoc networks, and the like, to provide an infrastructure-oriented connection for client computers 103-105. Such sub-networks may include mesh networks, Wireless LAN (WLAN) networks, cellular networks, and the like. In one embodiment, the system may include more than one wireless network.
Wireless network 108 may further include an autonomous system of terminals, gateways, routers, and the like connected by wireless radio links, and the like. These connectors may be configured to move freely and randomly and organize themselves arbitrarily, such that the topology of wireless network 108 may change rapidly.
Wireless network 108 may further employ a plurality of access technologies including 2nd (2G), 3rd (3G), 4th (4G) 5th (5G) generation radio access for cellular systems, WLAN, Wireless Router (WR) mesh, and the like. Access technologies such as 2G, 3G, 4G, 5G, and future access networks may enable wide area coverage for mobile computers, such as client computers 103-105 with various degrees of mobility. In one non-limiting example, wireless network 108 may enable a radio connection through a radio network access such as Global System for Mobil communication (GSM), General Packet Radio Services (GPRS), Enhanced Data GSM Environment (EDGE), code division multiple access (CDMA), time division multiple access (TDMA), Wideband Code Division Multiple Access (WCDMA), High Speed Downlink Packet Access (HSDPA), Long Term Evolution (LTE), and the like. In essence, wireless network 108 may include virtually any wireless communication mechanism by which information may travel between client computers 103-105 and another computer, network, cloud network, cloud instance, or the like.
Network 110 is configured to couple network computers with other computers, including, application server computer 116, client computers 102-105 through wireless network 108, cloud network 112, cloud instances 114, or the like. Network 110 is enabled to employ any form of computer readable media for communicating information from one electronic device to another. Also, network 110 can include the Internet in addition to local area networks (LANs), wide area networks (WANs), direct connections, such as through a universal serial bus (USB) port, other forms of computer-readable media, or any combination thereof. On an interconnected set of LANs, including those based on differing architectures and protocols, a router acts as a link between LANs, enabling messages to be sent from one to another. In addition, communication links within LANs typically include twisted wire pair or coaxial cable, while communication links between networks may utilize analog telephone lines, full or fractional dedicated digital lines including T1, T2, T3, and T4, and/or other carrier mechanisms including, for example, E-carriers, Integrated Services Digital Networks (ISDNs), Digital Subscriber Lines (DSLs), wireless links including satellite links, or other communications links known to those skilled in the art. Moreover, communication links may further employ any of a variety of digital signaling technologies, including without limit, for example, DS-0, DS-1, DS-2, DS-3, DS-4, OC-3, OC-12, OC-48, or the like. Furthermore, remote computers and other related electronic devices could be remotely connected to either LANs or WANs via a modem and temporary telephone link. In one embodiment, network 110 may be configured to transport information of an Internet Protocol (IP).
Cloud network 112 may be a public or private cloud network. Cloud network 112 may comprise multiple physical network computers, interconnected by one or more networks, such as, networks similar to and/or including network 108 and/or wireless network 110. Cloud network 112 may enable and/or provide one or more cloud instances. For example, cloud instances 114 may be operative in cloud network 112. The number and composition of cloud instances 114 may be vary depending on the demands of individual users, cloud network arrangement, operational loads, performance considerations, application needs, operational policy, or the like. In at least one of the various embodiments, cloud network 112 may be arranged as a hybrid network that includes a combination of private hardware resources, private cloud resources, public cloud resources, or the like.
Cloud instances 114 may be virtualized embodiments of network computer 300. Further, one or more cloud instances 114 may be operative on physical network computers, such as network computer 300. Cloud instances that may be operative on a network computer, such as, network computer 300 may be managed by a hypervisor, such as hypervisor 319. Further, cloud instances 114 may be arranged to use various computer operating systems. And, cloud instances running different computer operating systems may be operative in the same cloud network.
Additionally, communication media typically embodies computer readable instructions, data structures, program modules, or other transport mechanism and includes any information delivery media. By way of example, communication media includes wired media such as twisted pair, coaxial cable, fiber optics, wave guides, and other wired media and wireless media such as acoustic, RF, infrared, and other wireless media.
One embodiment of application server computer 116 is described in more detail below in conjunction with FIG. 3. Briefly, however, application server computer 116 includes virtually any network computer capable of managing the running one or more provider applications and/or security application, compressing application, databases, or the like, or combination thereof.
Although FIG. 1 illustrates application server computer 116 as a single computer, the innovations and/or embodiments are not so limited. For example, one or more functions of application server computer 116 may be distributed across one or more distinct network computers. Moreover, application server computer 116 is not limited to a particular configuration. Thus, in one embodiment, application server computer 116 may be implemented using a plurality of network computers. In other embodiments, the application server computer 116 may operate as a plurality of network computers within a cluster architecture, a peer-to-peer architecture, or the like. Further, in at least one of the various embodiments, one or more application server computers may be implemented using one or more cloud instances in one or more cloud networks. Accordingly, these innovations and embodiments are not to be construed as being limited to a single environment, and other configurations, and architectures are also envisaged.
Illustrative Client Computer
FIG. 2 shows one embodiment of client computer 200 that may be included in a system in accordance with at least one of the various embodiments. Client computer 200 may include many more or less components than those shown in FIG. 2. However, the components shown are sufficient to disclose an illustrative embodiment for practicing the present invention. Client computer 200 may represent, for example, one embodiment of at least one of client computers 102-105 of FIG. 1.
As shown in the figure, client computer 200 includes a processor 202 in communication with a mass memory 226 via a bus 234. In some embodiments, processor 202 may include one or more central processing units (CPU). Client computer 200 also includes a power supply 228, one or more network interfaces 236, an audio interface 238, a display 240, a keypad 242, an illuminator 244, a video interface 246, an input/output interface 248, a haptic interface 250. In some embodiments, a client computer may include components such as hardware security module 252, or a global positioning system (GPS) receiver 232.
Power supply 228 provides power to client computer 200. A rechargeable or non-rechargeable battery may be used to provide power. The power may also be provided by an external power source, such as an alternating current (AC) adapter or a powered docking cradle that supplements and/or recharges a battery.
Client computer 200 may optionally communicate with a base station (not shown), or directly with another computer. Network interface 236 includes circuitry for coupling client computer 200 to one or more networks, and is constructed for use with one or more communication protocols and technologies including, but not limited to, GSM, CDMA, TDMA, GPRS, EDGE, WCDMA, HSDPA, LTE, user datagram protocol (UDP), transmission control protocol/Internet protocol (TCP/IP), short message service (SMS), WAP, ultra wide band (UWB), IEEE 802.16 Worldwide Interoperability for Microwave Access (WiMax), session initiated protocol/real-time transport protocol (SIP/RTP), or any of a variety of other wireless communication protocols. Network interface 236 is sometimes known as a transceiver, transceiving device, or network interface card (NIC).
Audio interface 238 is arranged to produce and receive audio signals such as the sound of a human voice. For example, audio interface 238 may be coupled to a speaker and microphone (not shown) to enable telecommunication with others and/or generate an audio acknowledgement for some action.
Display 240 may be a liquid crystal display (LCD), gas plasma, light emitting diode (LED), organic LED, or any other type of display used with a computer. Display 240 may also include a touch sensitive screen arranged to receive input from an object such as a stylus or a digit from a human hand.
Keypad 242 may comprise any input device arranged to receive input from a user. For example, keypad 242 may include a push button numeric dial, or a keyboard. Keypad 242 may also include command buttons that are associated with selecting and sending images.
Illuminator 244 may provide a status indication and/or provide light. Illuminator 244 may remain active for specific periods of time or in response to events. For example, when illuminator 244 is active, it may backlight the buttons on keypad 242 and stay on while the client computer is powered. Also, illuminator 244 may backlight these buttons in various patterns when particular actions are performed, such as dialing another client computer. Illuminator 244 may also cause light sources positioned within a transparent or translucent case of the client computer to illuminate in response to actions.
Video interface 246 is arranged to capture video images, such as a still photo, a video segment, an infrared video, or the like. For example, video interface 246 may be coupled to a digital video camera, a web-camera, or the like. Video interface 246 may comprise a lens, an image sensor, and other electronics. Image sensors may include a complementary metal-oxide-semiconductor (CMOS) integrated circuit, charge-coupled device (CCD), or any other integrated circuit for sensing light.
Client computer 200 also comprises input/output interface 248 for communicating with external devices, such as a headset, or other input or output devices not shown in FIG. 2. Input/output interface 248 can utilize one or more communication technologies, such as USB, infrared, BluetoothTM, or the like.
Haptic interface 250 is arranged to provide tactile feedback to a user of the client computer. For example, the haptic interface 250 may be employed to vibrate client computer 200 in a particular way when another user of a computer is calling. In some embodiments, haptic interface 250 may be optional.
Client computer 200 may also include GPS transceiver 232 to determine the physical coordinates of client computer 200 on the surface of the Earth. GPS transceiver 232, in some embodiments, may be optional. GPS transceiver 232 typically outputs a location as latitude and longitude values. However, GPS transceiver 232 can also employ other geo-positioning mechanisms, including, but not limited to, triangulation, assisted GPS (AGPS), Enhanced Observed Time Difference (E-OTD), Cell Identifier (CI), Service Area Identifier (SAI), Enhanced Timing Advance (ETA), Base Station Subsystem (BSS), or the like, to further determine the physical location of client computer 200 on the surface of the Earth. It is understood that under different conditions, GPS transceiver 232 can determine a physical location within millimeters for client computer 200; and in other cases, the determined physical location may be less precise, such as within a meter or significantly greater distances. In one embodiment, however, client computer 200 may through other components, provide other information that may be employed to determine a physical location of the computer, including for example, a Media Access Control (MAC) address, IP address, or the like.
Further, client computer 200 may also comprise hardware security module (HSM) 252 for providing additional safeguards for generating, storing and/or using security/cryptographic information such as, keys, digital certificates, passwords, passphrases, two-factor authentication information, cryptographic hashing, or the like. In some embodiments, hardware security module may be employed to support one or more standard public key infrastructures (PKI), and may be employed to generate, manage, and/or store public/private key pairs, or the like. In some embodiments, HSM 252 may be a stand-alone client computer, in other cases, HSM 252 may be arranged as a hardware card that may be added to a client computer. In some embodiments, HSM 252 may be arranged to provide hardware accelerated cryptography and/or compression of data.
Client computer 200 may also include sensors 254 for determining geolocation information (e.g., GPS), monitoring electrical power conditions (e.g., voltage sensors, current sensors, frequency sensors, and so on), monitoring weather (e.g., thermostats, barometers, anemometers, humidity detectors, precipitation scales, or the like), or the like. Sensors 254 may be one or more hardware sensors that collect and/or measure data that is external to client computer 200.
Mass memory 226 includes a Random Access Memory (RAM) 204, a Read-only Memory (ROM) 222, and other storage means. Mass memory 226 illustrates an example of computer readable storage media (devices) for storage of information such as computer readable instructions, data structures, program modules or other data. Mass memory 226 stores a basic input/output system (BIOS) 224, or the like, for controlling low-level operation of client computer 200. The mass memory also stores an operating system 206 for controlling the operation of client computer 200. It will be appreciated that this component may include a general-purpose operating system such as a version of UNIX, or LINUXTM, or a specialized client communication operating system such as Microsoft Corporation's Windows MobileTM, Apple Corporation's iOSTM, Google Corporation's AndroidTM or the Symbian® operating system, or the like. The operating system may include, or interface with a Java virtual machine module, or the like, that enables control of hardware components and/or operating system operations via application programs.
Mass memory 226 further includes one or more data storage 208, which can be utilized by client computer 200 to store, among other things, applications 214 and/or other data. For example, data storage 208 may also be employed to store information that describes various capabilities of client computer 200. The information may then be provided to another computer based on any of a variety of events, including being sent as part of a header during a communication, sent upon request, or the like. Data storage 208 may also be employed to store social networking information including address books, buddy lists, aliases, user profile information, or the like. Further, data storage 208 may also store messages, web page content, or any of a variety of user generated content. Further, data storage 208 may be used for storing credentials 210 that may be employed for cryptography operations. Also, data storage may employed for storing seed files 212 that may be employed for operations related to cryptography, compression, or the like, or combination thereof.
At least a portion of the information stored in data storage 208 may also be stored on another component of client computer 200, including, but not limited to processor readable storage media 230, a disk drive or other computer readable storage devices (not shown) within client computer 200.
Processor readable storage media 230 may include volatile, non-transitory, non-transitive, nonvolatile, removable, and non-removable media implemented in any method or technology for storage of information, such as computer or processor-readable instructions, data structures, program modules, or other data. Examples of computer readable storage media include RAM, ROM, Electrically Erasable Programmable Read-only Memory (EEPROM), flash memory or other memory technology, Compact Disc Read-only Memory (CD-ROM), digital versatile disks (DVD) or other optical storage, solid state drives (SSD), magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other physical medium which can be used to store the desired information and which can be accessed by a computer. Processor readable storage media 230 may also be referred to herein as computer readable storage media and/or computer readable storage device.
Applications 214 may include computer executable instructions which, when executed by client computer 200, transmit, receive, and/or otherwise process network data. Network data may include, but is not limited to, messages (e.g. SMS, Multimedia Message Service (MMS), instant message (IM), email, and/or other messages), audio, video, and enable telecommunication with another user of another client computer. Applications 214 may include, for example, client application 216, client security application 217, a browser 218, and other applications 220.
Browser 218 may include virtually any application configured to receive and display graphics, text, multimedia, messages, and the like, employing virtually any web based language. In one embodiment, the browser application is enabled to employ HDML, WML, WMLScript, JavaScript, SGML, HTML, HTML5, XML, and the like, to display and send a message. However, any of a variety of other web-based programming languages may be employed. In one embodiment, browser 218 may enable a user of client computer 200 to communicate with another network computer, such as application server computer 116 shown in FIG. 1.
Other applications 220 may include, but are not limited to, calendars, search programs, email clients, IM applications, SMS applications, voice over Internet Protocol (VOIP) applications, contact managers, task managers, transcoders, database programs, word processing programs, security applications, spreadsheet programs, games, search programs, and so forth.
Additionally, in one or more embodiments (not shown in the figures), client computer 200 may include an embedded logic hardware device instead of a CPU, such as, an Application Specific Integrated Circuit (ASIC), Field Programmable Gate Array (FPGA), Programmable Array Logic (PAL), or the like, or combination thereof. The embedded logic hardware device may directly execute its embedded logic to perform actions. Also, in one or more embodiments (not shown in the figures), the client computer may include a hardware microcontroller instead of a CPU. In at least one embodiment, the microcontroller may directly execute its own embedded logic to perform actions and access its own internal memory and its own external Input and Output Interfaces (e.g., hardware pins and/or wireless transceivers) to perform actions, such as System On a Chip (SOC), or the like.
Illustrative Network Computer
FIG. 3 shows one embodiment of a network computer 300, according to one embodiment of the invention. Network computer 300 may include many more or less components than those shown. The components shown, however, are sufficient to disclose an illustrative embodiment for practicing the invention. Network computer 300 may be configured to operate as a server, client, peer, a host, cloud instance, or any other computer. Network computer 300 may represent, for example application server computer 116, and/or other network computers.
Network computer 300 may include processor 302, processor readable storage media 328, network interface unit 330, an input/output interface 332, hard disk drive 334, hardware security module 340, video display adapter 336, and memory 326, all in communication with each other via bus 338. In some embodiments, processor 302 may include one or more central processing units. In at least one of the various embodiments, network computer 300 may include global positioning system (GPS) receiver 338.
As illustrated in FIG. 3, network computer 300 also can communicate with the Internet, or other communication networks, via network interface unit 330, which is constructed for use with various communication protocols including the TCP/IP protocol. Network interface unit 330 is sometimes known as a transceiver, transceiving device, or network interface card (NIC).
Network computer 300 also comprises input/output interface 332 for communicating with external devices, such as a keyboard, or other input or output devices not shown in FIG. 3. Input/output interface 332 can utilize one or more communication technologies, such as USB, infrared, NFC, BluetoothTM, or the like.
Network computer 300 may also include GPS transceiver 338 to determine the physical coordinates of network computer 300 on the surface of the Earth. GPS transceiver 338, in some embodiments, may be optional. GPS transceiver 338 typically outputs a location as latitude and longitude values. However, GPS transceiver 338 can also employ other geo-positioning mechanisms, including, but not limited to, triangulation, assisted GPS (AGPS), Enhanced Observed Time Difference (E-OTD), Cell Identifier (CI), Service Area Identifier (SAI), Enhanced Timing Advance (ETA), Base Station Subsystem (BSS), or the like, to further determine the physical location of network computer 300 on the surface of the Earth. It is understood that under different conditions, GPS transceiver 338 can determine a physical location within millimeters for network computer 300; and in other cases, the determined physical location may be less precise, such as within a meter or significantly greater distances. In one embodiment, however, network computer 300 may through other components, provide other information that may be employed to determine a physical location of the computer, including for example, a Media Access Control (MAC) address, IP address, or the like.
Further, network computer 300 may also comprise hardware security module (HSM) 340 for providing additional safeguards for generating, storing and/or using security/cryptographic information such as, keys, digital certificates, passwords, passphrases, two-factor authentication information, personal identification numbers, or the like. In some embodiments, hardware security module may be employed to support one or more standard public key infrastructures (PKI), and may be employed to generate, manage, and/or store keys pairs, or the like. In some embodiments, HSM 340 may be a stand-alone network computer, in other cases, HSM 340 may be arranged as a hardware card that may be added to a network computer. In some embodiments, HSM 340 may be arranged to provide hardware accelerated cryptography and/or compression of data.
Network computer 300 may also include sensors 342 for determining geolocation information (e.g., GPS), monitoring electrical power conditions (e.g., voltage sensors, current sensors, frequency sensors, and so on), monitoring weather (e.g., thermostats, barometers, anemometers, humidity detectors, precipitation scales, or the like), or the like. Sensors 342 may be one or more hardware sensors that collect and/or measure data that is external to network computer 300.
Memory 326 generally includes RAM 304, ROM 322 and one or more permanent mass storage devices, such as hard disk drive 334, tape drives, solid state drives, optical drives, and/or floppy disk drives. Memory 326 stores operating system 306 for controlling the operation of network computer 300. Any general-purpose operating system may be employed. Basic input/output system (BIOS) 324 is also provided for controlling the low-level operation of network computer 300.
Although illustrated separately, memory 326 may include processor readable storage media 328. Processor readable storage media 328 may be referred to and/or include computer readable media, computer readable storage media, and/or processor readable storage device. Processor readable storage media 328 may include volatile, nonvolatile, non-transitory, non-transitive, removable, and non-removable media implemented in any method or technology for storage of information, such as computer readable instructions, data structures, program modules, or other data. Examples of processor readable storage media include RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, thumb drives, memory cards, or any other media which can be used to store the desired information and which can be accessed by a computer.
Memory 326 further includes one or more data storage 308, which can be utilized by network computer 300 to store, among other things, applications 314 and/or other data. For example, data storage 308 may also be employed to store information that describes various capabilities of network computer 300. The information may then be provided to another computer based on any of a variety of events, including being sent as part of a header during a communication, sent upon request, or the like. Data storage 308 may also be employed to store messages, web page content, or the like. At least a portion of the information may also be stored on another component of network computer 300, including, but not limited to processor readable storage media 328, hard disk drive 334, or other computer readable storage medias (not shown) within network computer 300.
Data storage 308 may include a database, text, spreadsheet, folder, file, or the like, that may be configured to maintain and store user account identifiers, user profiles, email addresses, IM addresses, and/or other network addresses; or the like. Data storage 308 may further include program code, data, algorithms, and the like, for use by a processor, such as processor 302 to execute and perform actions. In one embodiment, at least some of data store 308 might also be stored on another component of network computer 300, including, but not limited to processor-readable storage media 328, hard disk drive 334, or the like.
Data storage 308 may be used for storing credentials 310 that may be employed for cryptography operations. Also, data storage 308 may employed for storing seed files 312 that may be employed for operations related to cryptography, compression, or the like, or combination thereof.
Applications 314 may include computer executable instructions, which may be loaded into mass memory and run on operating system 306. Examples of application programs may include transcoders, schedulers, calendars, database programs, word processing programs, Hypertext Transfer Protocol (HTTP) programs, customizable user interface programs, IPSec applications, encryption programs, security programs, SMS message servers, IM message servers, email servers, account managers, and so forth. Applications 314 may also include website server 318, hypervisor 319, security application 320, server application 321, or secure storage application 342.
Website server 318 may represent any of a variety of information and services that are configured to provide content, including messages, over a network to another computer. Thus, website server 318 can include, for example, a web server, a File Transfer Protocol (FTP) server, a database server, a content server, email server, or the like. Website server 318 may provide the content including messages over the network using any of a variety of formats including, but not limited to WAP, HDML, WML, SGML, HTML, HTML5, XML, Compact HTML (cHTML), Extensible HTML (xHTML), or the like.
Additionally, in one or more embodiments (not shown in the figures), network computer 300 may include an embedded logic hardware device instead of a CPU, such as, an Application Specific Integrated Circuit (ASIC), Field Programmable Gate Array (FPGA), Programmable Array Logic (PAL), or the like, or combination thereof. The embedded logic hardware device may directly execute its embedded logic to perform actions. Also, in one or more embodiments (not shown in the figures), the network computer may include a hardware microcontroller instead of a CPU. In at least one embodiment, the microcontroller may directly execute its own embedded logic to perform actions and access its own internal memory and its own external Input and Output Interfaces (e.g., hardware pins and/or wireless transceivers) to perform actions, such as System On a Chip (SOC), or the like.
Illustrative Logical System
FIG. 4 shows an overview of architecture of secure networking system 400 in accordance with at least one of the various embodiments. System 400 includes client computer 402 that may be in communication with application server computer 404 over network 406.
In at least one of the various embodiments, client computer 402 may be a client computer, such as, client computer 200. Likewise, in at least one of the various embodiments, application server computer 404 may be a network computer, such as, network computer 300. Further, in at least one of the various embodiments, network 406, may be a network such as, wireless network 108, network 110, cloud network 112, or the like, or combination thereof.
In at least one of the various embodiments, client computer 402 may include client cloud application 408 that may be logically coupled with client security application 410. Further, client security application may include one or more components, such as, core 412. In at least one of the various embodiments, core 412 may be arranged to include one or more hardware and/or software cryptography components. In some embodiments, such components may be arranged to generate cryptographic credentials and/or credential information, such as, public/private key pairs, cryptographic certificates, or the like. Also, in at least one of the various embodiments, core 412 may be arranged to perform actions such as encryption, cryptographic hashing, cryptographic signing, key generation, compression, or the like, or combination thereof. In some embodiments, core 412 may be partly or fully implemented as a hardware security modules, such as, HSM 252.
Similarly, in at least one of the various embodiments, application server computer 404 may include security application server 414, and cloud application server 416. Similar to client security application, security application server 414 may include one or more components, such as, core 418. In at least one of the various embodiments, core 418 may be partly or fully implemented as a hardware security module, such as, HSM 340. Further, in some embodiments, server computer 404 may include one or more data storage systems, such as, data store 420. In some embodiments, data store 420 may be a file system, distributed file system, database, or the like, or combination thereof. Further, in some embodiments, data store 420 may reside on one or more network computers and/or storage computers that are separate from server computer 404.
In at least one of the various embodiments, client security application 410 may be statically or dynamically coupled with client cloud application 408. In some embodiments, client security application 410 may be built-in to client cloud applications. In other embodiments, client cloud application 408 may be arranged to logically couple with client security application 410 through an API, or the like. For example, communication between client cloud applications and client security applications may be performed using one or more inter-process communication mechanism that may be supported by the client computer.
In at least one of the various embodiments, client cloud application 408 may transparently employ client security application 410 to securely (cryptographically secure) communicate with a cloud application server, such as, cloud application server 416. Likewise, in at least one of the various embodiments, cloud application server 416 may be arranged to employ security application server 418 to cryptographically secure communications between itself and client cloud applications, such as, client cloud application 408.
In at least one of the various embodiments, client security application 410 may be embedded with credential information that is associated with the entity that owns the server cloud application. For example, a financial service company may arrange its client security applications to include particular public key credentials that correspond to one or more particular security application servers. Also, in at least one of the various embodiments, the cloud security application and/or the server security application may be arranged include other predefined identifiers for associating one or more client security applications with one or more particular security application servers. In at least one of the various embodiments, seed files, client identifiers, entity identifiers, platform identifiers, or the like, may be preinstalled (e.g., built-in) client security applications, such as, client security application 410.
In at least one of the various embodiments, a user may download and install client security applications from restricted access application portals that are associated with a particular entity (e.g., an enterprise app store for a financial services company). Accordingly, an entity may rely on the security features of the restricted access application download portal to ensure that the users of client security applications (e.g., those that include credentials associated with the owning entity) are authorized users.
In at least one of the various embodiments, client security applications may be arranged to enable users to download and/or update the credential information from a source that is different than the application download portal. For example, the client security application may be made publically available (e.g., on a public app store) with the credentials provided later from a restricted/secure source.
In at least one of the various embodiments, before a client security application may be enabled for secure communication it may be registered with the one or more security application servers. In at least one of the various embodiments, client security applications and security application servers may be arranged to employ a defined handshake protocol to exchange credential information, at least one embodiment of which is described below. In at least one of the various embodiments, client security applications and security application servers may then generate transport keys to employ for communication of secure data with a security application server they may be registered with.
In at least one of the various embodiments, this arrangement at least enables client security applications and security application servers to conduct secure communication without the need to exchange keys and/or the intervention of trusted third-parties.
FIG. 5A shows a registration process employed by system 500 that is in accordance with at least one of the various embodiments. In at least one of the various embodiments, client security applications, and security application servers may be arranged to perform various communication steps to register a client security application with a security application server. In this example, system 500 comprises, client application 502, client security application 504, and security application server 506 that may be in communication over a network.
In at least one of the various embodiments, at step 508, client security application 508 may generate a client public key/private key pair. In at least one of the various embodiments, client security application 504 may be arranged to include facilities (e.g., core 412) that may be employed to generate cryptographic credentials such as public key/private key pairs. One of ordinary skill in the art will appreciate that there are multiple ways to generate public/private keys to implement public-key cryptography. The any cryptographic secure public key cryptography protocols/infrastructures may be employed without departing from the scope of these innovations.
At step 510, in at least one of the various embodiments, client security application 504 may generate a registration information bundle that at least includes credential information to employ to register with security application server 506. In at least one of the various embodiments, credential information may include an entity identifier (entity ID), a platform identifier (platform ID), the public key generated by client security application 504, or the like, or combination thereof. In at least one of the various embodiments, the combination of the entity ID, and the platform ID may be considered together as a client identifier (client ID).
In at least one of the various embodiments, the entity ID may be an identifier that corresponds to the entity associated with services/applications the user is trying to access. For example, the entity ID may correspond to a particular financial services company that requires secure communication between its client applications and server applications. In at least one of the various embodiments, the entity ID may be employed to enable security application servers to determine if the client security application is associated with an authorized entity. In at least one of the various embodiments, entity ID values and mapping to entities may be configured for each security application server and/or client security application.
In at least one of the various embodiments, platform ID may be an identifier that corresponds to the client computer the client security application is running on. For example, if a user is employing a mobile computer (e.g., a smart phone) the platform ID may be a platform dependent identifier that may be employed to identify the particular mobile computer being using. In some embodiments, the particular structure and method of acquisition of the platform ID may vary depending on the features of the client computer. In the interest of brevity the various techniques are not detailed herein. However, one of ordinary skill in the art will be able to arrange the client security application to determine how to obtain a suitable platform ID particular to the make, manufacture, operating system, or the like, of the particular client computer that is being employed.
In at least one of the various embodiments, the client public key included in the registration information bundler may be the public key that is generated at step 508.
In at least one of the various embodiments, the plain-text (unencrypted) format of the registration information bundle will be known to the client security application and the security application server. In some embodiments, the registration information bundle may include a version number to indicate a particular format that may be employed for a bundle.
In at least one of the various embodiments, before communicating the registration information to the security application server, the client security application may encrypt the information using the public key of the security application server. In at least one of the various embodiments, the public key of the security application server may be embedded in the client security application before it is installed on the client computer. Or, in some embodiments, it may have been provided from another source.
At step 512, in at least one of the various embodiments, the security application server may decrypt the registration information bundle using its private key. Accordingly, if the public key used by the client security application to encrypt the registration information bundle corresponds to the security application server, the entity ID may be extracted and employed to confirm that the client security application is associated with the entity. Alternatively, if the entity ID is incorrect, the security application server may disregard the registration request.
In at least one of the various embodiments, if the registration information is authenticated by the security application server, the server may generate a response information bundle that includes the client ID that was sent by client security application 504 in step 510. In at least one of the various embodiments, before providing the response information bundle to client security application 504, the information may be encrypted using client security application 504's public key that was provided in the registration information bundle at step 510.
At step 514, in at least one of the various embodiments, client security application 504 may decrypt the response information bundle using its private key and confirm that the client ID information sent in step 512 is the correct value. In at least one of the various embodiments, if the client ID (e.g., entity ID+platform ID) is authenticated by client security application 504, the client security application may consider itself as successfully registered with security application server 506. Accordingly, in at least one of the various embodiments, secure communication sessions may be established between client security application 504 and security application service 506.
In at least one of the various embodiments, client application 502 may not be a direct participant in the registration protocol described above, however, client application 502 may have initiated the registration process during an install, startup, and/or configuration process. Or, in some embodiments, upon a user logging in or otherwise authenticating herself with the client application, or the like, may initiate a registration process.
FIG. 5B shows a registration process employed by system 516 that is in accordance with at least one of the various embodiments. In at least one of the various embodiments, client security applications, and security application servers may be arranged to perform various communication steps to register a client security application with a security application server. In this example, system 516 comprises, end user client device 518 that include cloud application client 520, and client security application 522. Also, in this example, system 516 comprises cloud server 524 that includes security application server 526 and cloud application server 528. In at least one of the various embodiments, end user device 518 may be in communication with cloud server 524 over a network, such as network 108, network 110, cloud network 112, or the like, or combination thereof.
At step 530, in at least one of the various embodiments, cloud client application 520 may begin executing. In some embodiments, cloud client application 520 may start up automatically if end user device 518 boots up. In other embodiments, cloud client application 520 may be begin executing based on a user's input and/or action. In at least one of the various embodiments, cloud client application 520 may be arranged to communicate to client security application 522 to initiate a registration process. In at least one of the various embodiments, communication between cloud application client 520 and client security application 522 may be performed using a library function call, inter-process communication, or the like, or combination thereof.
At step 532, in at least one of the various embodiments, client security application 522 may initiate a request to security application server 526 for initializing a transport key (trx key). In at least one of the various embodiments, the first time a connection is established, the message may include information such as, entity ID, platform ID, client public key, or the like. In at least one of the various embodiments, the message may be encrypted using a public key that corresponds to security application server 526. In at least one of the various embodiments, for subsequent initialization requests, since a client ID may be available, the message bundle may include the client ID and client public key.
At step 534, in at least one of the various embodiments, if security application server 526 is provided the message bundle from step 532, it may be decrypted using the server private key that corresponds to the server public key employed by client security application 522 to encrypt the message bundle. In at least one of the various embodiments, if this is the first initialization and/or a the client ID is not included in the message bundle, a client ID may be generated using the entity ID and platform ID included in the bundle. In at least one of the various embodiments, the client ID may be generated by concatenating the entity ID and the platform ID. In some embodiments, additional value may be included, such as, region codes, time stamps, or the like. Further, in at least one of the various embodiments, the client ID may be generated by cryptographically hashing the information used for the client ID. In at least one of the various embodiments, the generated client ID may be stored as a key/index value for subsequent identification of end user device 518, cloud application client 520, client security application 522, or the like, or combination thereof. In at least one of the various embodiments, if the client ID is determined and/or generated, security application server 526 may generate a transport key (trx key) initial instruction set.
At step 536, in at least one of the various embodiments, security application server 526 may encode the message bundle generate at step 534 using the client public key that is provided at step 532. Accordingly, in at least one of the various embodiments, the encrypted message bundle may be provided to client security application 522.
At step 538, in at least one of the various embodiments, client security application 522 may decrypt the message bundle using its client private key and value the client ID and store to initial instruction set. At this point, in at least one of the various embodiments, a connection between client security application 522 and security application server 526 may be established. Accordingly, in some embodiments, client security application may indicate that a connection is opened to cloud application client. FIG. 6A shows a transport key generation process performed by system 600 that is in accordance with at least one of the various embodiments. In at least one of the various embodiments, client security applications, and security application servers that are registered with each other (See, FIGS. 5A and 5B) may be arranged to perform various steps to generate an initial transport key to establish a secure communication session between a client security application and a security application server. In this example, system 600 comprises, client security application 602, and security application server 604 that may be in communication over a network.
At step 606, in at least one of the various embodiments, client security application 602 may generate a session request information bundle that includes an initialize transport key request and a client ID. The session request information bundle may be encrypted using the security application server's public key. The encrypted session request information may be provided to security application server 604.
At step 608, in at least one of the various embodiments, security application server 604 may decrypt the session request information bundle using its private key. If the client ID is valid and authentic, security application server 604 may generate an instruction set. In at least one of the various embodiments, the instruction set may include at least three parts, a seed file identifier, position/offset value, and a pass phrase length value. The format of the instruction set may be known in advance to both client security application 602 and security application server 604. In some cases, the instruction set may include information, such as, a version number that indicates the format of the instruction set. In at least one of the various embodiments, the instruction set may be bundled with the client ID of client security application 602. In at least one of the various embodiments, security application server 604 may encrypt the instruction set bundle using client security application 602's public key. In at least one of the various embodiments, the public key may be associated with the client ID of client security application 602 and stored on the security application server as part of the registration of client security application 602 with security application 604 (See, FIG. 5). If the instruction set bundle is successfully encrypted it may be provided to client security application 602.
At step 610, in at least one of the various embodiments, client security application 602 is provided the encrypted instruction set bundle from security application server 604. The instruction set bundle may be decrypted and authenticated by client security application 602. In at least one of the various embodiments, the instruction set bundle may be authenticated by comparing the value of the provided client ID with the client ID of the client security application.
In at least one of the various embodiments, if the instruction set bundle is authenticated and found valid, client security application 602 may generate a transport key for cryptographic operations.
In at least one of the various embodiments, the transport key may be generated using the instruction set information. The instruction set information may be employed to generate a pass phrase from which an initial transport key may be generated.
In at least one of the various embodiments, the seed file identifier may be employed to select a particular seed file that is on or available to the client security application. The offset value may be employed to determine a starting position in the selected seed file. And, the phrase length value may be employed to define the number of words/bytes from the seed file to include in the pass phrase. Once the pass phrase is determined, the pass phrase may be cryptographically hashed to produce a transport key.
Also, since, in at least one of the various embodiments, security application server 604 has the same instruction set and seed files as client security application 602 it may generate the correct transport key using a similar procedure as client security application 602.
Accordingly, in at least one of the various embodiments, an initial transport key may be employed to cryptographically secure communications between client security application 602 and security application server 604. In at least one of the various embodiments, this transport key initialization process enables the initial transport key to be generated without exchanging the transport key over the network. In at least one of the various embodiments, data intended for secure communication may be encrypted using the initial transport key. Similarly, at step 612, if security application server, sends data rather than receives data, it may encrypt the data using the initial transport key. In at least one of the various embodiments, the transport keys for the client security application and the security application server may be independent from each other. Accordingly, in at least one of the various embodiments, one key may be generated for encrypting/decrypting data from the client and another transport key may be generated for encrypting/decrypting data sent from the server. Accordingly, in at least one of the various embodiments, a particular transport key may be employed for one direction of transmission. In at least one of the various embodiments, the transport keys and correspondent workspace memory may be independent for each direction of communication.
Note, in at least one of the various embodiments, the transport keys in step 610 and step 612 may be referred to as initial transport keys at least because the key rotation process inherent in the cryptographic process may generate subsequent transport keys during the ongoing encryption process.
FIG. 6B shows a transport key generation process performed by system 614 that is in accordance with at least one of the various embodiments. In at least one of the various embodiments, client security applications, and security application servers that are registered with each other (See, FIGS. 5A and 5B) may be arranged to perform various steps to generate an initial transport key to establish a secure communication session between a client security application and a security application server. In this example, system 614 comprises, end user device 616 and cloud server 622 that may be in communication over a network. In at least one of the various embodiments, end user device 616 may include cloud application 618 and client security application 620. Also, in at least one of the various embodiments, cloud server 622 may include security application server 624 and cloud application server 626.
At step 628, in at least one of the various embodiments, cloud application client 618 may initiate a service request/message directed to cloud application server 626. In at least one of the various embodiments, the request message may be provided to client security application 620 using a library function call, inter-process communication, or the like, or combination thereof.
At step 630, in at least one of the various embodiments, client security application 620 may generate an initial transport key (TRX key 0) using the initial instruction set that was provided previously by the security application server. Accordingly, the request message may be encrypted using initial transport key (TRX key 0) and provided to cloud server 620 over a network.
At step 632, in at least one of the various embodiments, security application server 624 may generate its copy of TRX Key 0 using its copy of the initial instruction set. Accordingly, it may employ its copy of TRX Key 0 to decrypt the request message provided by client security application 620.
At step 634, in at least one of the various embodiments, security application server 624 may provide the decrypted request message to cloud application server 626. In at least one of the various embodiments, the request message may be provided using one or more inter-process communication methods support by cloud server 622. Further, in at least one of the various embodiments, cloud server application 626 may provide a response message to security application server to provide to cloud application client 618.
At step 636, in at least one of the various embodiments, security application server 624 may generate a subsequent transport key based on one or more encryption algorithms that may be employed. For example, in at least one of the various embodiments, the transport key employed for decrypting the last message sent by the client security application may be cryptographically hashed to generate an initial key for security application server to employ to encrypt information that may be sent to the client security application.
In at least one of the various embodiments, cache (e.g., workspace memory) information that is generated during the decryption of the request message may be employed to derive the next transport key for encrypting the response message. Accordingly, in at least one of the various embodiments, the next transport key may be employed to encrypt to response message. Also, in at least one of the various embodiments, an encryption cache generated during the encryption of the response using the next transport key may be employed to generate an additional key that may be employed to further encrypt the response message. If the response message is encrypted may be provided to client security application 620 over the network,
At step 638, in at least one of the various embodiments, client security application 620 may generate a transport key for decrypting the response message that was encrypted using the server's transport key. In at least one of the various embodiments, the client security application may generate its own copy of the server's transport key based on the transport key used by the client to encrypt the request message. For example, in at least one of the various embodiments, the client security application may cryptographically hash its transport key (the as the server did) to generate a transport key to decrypt the encrypted response message that was sent by the security application server. Further, in at least one of the various embodiments, client security application 620 may be arranged to further decrypt the response message based on the values storage in a workspace memory included in an encryption core, such as encryption core 412. Accordingly, the decrypted response message may be provided to cloud application client 618 for processing.
In at least one of the various embodiments, each subsequent request and response may use transport keys generated based on transport key rotation and/or key schedule inherent in the particular encryption algorithm. In at least one of the various embodiments, such transport keys may be generated based on cryptographic information that may be generated during the previous messages encryption and/or decryption. In at least one of the various embodiments, such cryptographic information may be a consequence of a particular cryptographic process and/or it may be explicitly generated using one or more key rotation/generation protocols.
Generalized Operation
The operation of certain aspects of the invention will now be described with respect to FIGS. 7-12. In at least one of various embodiments, processes 700, 800, 900, 1000, 1100, and 1200 described in conjunction with FIGS. 7-12, respectively, may be implemented by and/or executed on a network computer, such as network computer 300 of FIG. 3. In other embodiments, these processes or portions of these processes may be implemented by and/or executed on a plurality of network computers, such as network computer 300 of FIG. 3. Further, in other embodiments, these processes or portions of these processes may be implemented by and/or executed on one or more client computers, such as client computer 200 as shown in FIG. 2. Also, in at least one of the various embodiments, these processes or portions of these processes may be implemented by and/or executed on one or more cloud instances operating in one or more cloud networks. However, embodiments are not so limited and various combinations of network computers, client computer, cloud computer, or the like, may be utilized.
FIG. 7 shows an overview flowchart for process 700 to secure communications in accordance with at least one of the various embodiments. After a start block, at block 702, in at least one of the various embodiments, provide a client application and a client security application to a client computer. At block 704, in at least one of the various embodiments, the client computer may be registered for secure communication by registering the client security application with the appropriate security application server. At block 706, in at least one of the various embodiments, since the client security application is registered with the security application server, cryptographic secure communication between them may be conducted. Next, control may be return to a calling process.
FIG. 8 shows a flowchart of process 800 to register a client security application with a security application server in accordance with at least one of the various embodiments. After a start block, at block 802, in at least one of the various embodiments, a client security application, such as, client security application 217 in FIG. 2, may generate a cryptographic private key/public key pair for public-key encryption.
At block 804, in at least one of the various embodiments, credential information associated with the client security application, including at least its public key may be combined into a registration information bundle and encrypted using a public key that corresponds to the security application server that the client security application is registering with. If encrypted successfully, the encrypted registration information bundle may be provided to the target security application server.
In at least one of the various embodiments, the client security application may be preinstalled with the public key for one or more of its associated security application servers. Also, in at least one of the various embodiments, the public key corresponding to a targeted security application server may be provided by some other means, such as, downloaded from a secure portal, or the like.
In at least one of the various embodiments, the registration information may include a client ID that uniquely identifies the source of the registration request. In at least one of the various embodiments, the client ID may be comprised of an entity ID and a platform ID that are associated with the client security application that is attempting to register with the security application server.
At block 806, in at least one of the various embodiments, the security application server may decrypt and authenticate the provided registration information bundle. In at least one of the various embodiments, the security application server may employ its private key that corresponds to the public key employed by the client security application to encrypt the registration information bundle. In at least one of the various embodiments, the decrypted credential information may be employed to authenticate the client security application. For example, the security application server may authenticate the registration attempt by comparing the entity ID included in the provided client ID to the entity ID associated with itself, the particular security application server.
At block 808, in at least one of the various embodiments, the security application server may generate a response information bundle that includes a copy of the client ID. At block 810, in at least one of the various embodiments, the security application server may encrypt the response information bundle. In some embodiments it may be encrypted using the public key of the client security application.
At block 812, in at least one of the various embodiments, the encrypted response bundle may be provided to the client security application. In at least one of the various embodiments, upon obtaining the encrypted the response bundle, the client security application may decrypt the response bundle using its private key. If the response bundle is decrypted the client security application may authenticate the response by comparing the client ID that is included in the response bundle with its own client ID. If the client ID included in the response bundle matches the client security application's own client ID the response may be determined to be valid and authentic.
At decision block 814, in at least one of the various embodiments, if the response bundle is authenticated by the client security application, control may flow to block 816; otherwise, control may flow to block 818.
At block 816, in at least one of the various embodiments, since the client security application successfully registered with the security application server they may engage in secure communication. Next, control may be returned to a calling process. At block 818, in at least one of the various embodiments, since the response bundle was not successfully authenticated, the client security application may reject/cancel the registration attempt. Next, control may be returned to a calling process.
FIG. 9A shows a flowchart of process 900 to perform actions to conduct a communication session between a client security application and a security application server in accordance with at least one of the various embodiments. After a start block, at block 902, in at least one of the various embodiments, a client application may attempt to communicate with a server application. As described above, the client application may be installed on a client computer that includes a client security application, such as, client security application 217. Likewise, the server application may be hosted on server computer that includes security application server.
At block 904, in at least one of the various embodiments, the client security application may encrypt its client ID using the public key of the security application server that it is registered. In at least one of the various embodiments, the client ID may be comprised of a platform ID and an entity ID that is associated with the client security application on the client computer. In at least one of the various embodiments, the client security application may generate a session request information bundle that includes the client ID and request as described in FIG. 6. The session request bundle may be encrypted using the public key of the security application server.
At block 906, in at least one of the various embodiments, the client security application may be provide the encrypted session request bundle to the security application server. At decision block 908, in at least one of the various embodiments, if the session request bundle is authenticated successfully by the security application server, control may flow to connector 910 for further processing; otherwise, control may flow to block 912.
At block 912, in at least one of the various embodiments, since the session request bundle is not authenticated the security application server may reject the communication session request. Also, in at least one of the various embodiments, the security application server may log the failed attempt or otherwise notify an administrator of the failed connection attempt. Next control may flow to a calling process.
FIG. 9B shows a continuation flowchart of process 900 that establishing a communication session between a client security application and a security server application in accordance with at least one of the various embodiments. After connector 914 (label as connector 910 in FIG. 9A), at block 916, in at least one of the various embodiments, the security application server may generate an instruction set for the session. As described above, the instruction set may comprise a seed file identifier, offset value, and pass phrase length. In at least one of the various embodiments, the values of each component of the instruction set may be generated using a random number generator. In some embodiments, additional policy based rules and/or configuration may be employed to influence/restrict the selection of instruction set value. For example, a rule may be employed to ensure that the instruction set information is not duplicated. Or, to ensure that the resultant pass phrases do not overlap, or that have sufficient length and/or entropy as defined by one or more predefined threshold values.
At block 918, in at least one of the various embodiments, the security application server may generate an instruction set bundle that includes the client ID of the client security application, and the instruction set. In at least one of the various embodiments, the security application server may encrypt the instruction set bundle using the public key of the client security application. If encrypted successfully, the encrypted instruction set bundle may be provided to the client security application.
At block 920, in at least one of the various embodiments, the client security application may decrypt and authenticate the instruction set bundle that is provided by the security application server. In at least one of the various embodiments, the client security application may decrypt the instruction set bundle using the client security application's private key.
In at least one of the various embodiments, the client security application may authenticate the instruction set bundle by comparing the client ID included in the bundle with the client security application's own client ID. If the value matches the instruction set bundle may be authenticated.
At block 922, in at least one of the various embodiments, both the client security application and the security application server may generate local copies of a symmetric transport key based on the instruction set information. In at least one of the various embodiments, the client security application may employ the instruction set sent by the security application server to generate its local copy of the transport key. And, in some embodiments, the security application server may employ the instruction set information to generate its local copy of the transport key.
In at least one of the various embodiments, the security applications may determine a seed file identifier from the instruction set. In at least one of the various embodiments, the identifier may be an index into the set of available seed files. In other embodiments, other values such as file names may be employed.
In at least one of the various embodiments, a seed file corresponding to the seed file identifier may be determined. Accordingly, the security applications may employ the offset value to determine position in the in seed file. For example, if the offset value 120, the security application may count 120 bytes and/or words from the beginning of the seed file to determine a starting point for generating a pass phrase. Next, in at least one of the various embodiments, the pass phrase length value may define how many bytes/words from the seed file starting at the offset point to include in a pass phrase. In at least one of the various embodiments, if the pass phrase is selected, the transport key may be generated by cryptographically hashing the pass phrase to produce the key.
At block 924, in at least one of the various embodiments, the client security application and the security application server may employ their respective transport keys to conduct cryptographically secure communication. Next, control may be returned to a calling process.
FIG. 10 shows a flowchart of process 1000 for generating a transport key from an instruction set in accordance with at least one of the various embodiments. After a start block, at block 1002, in at least one of the various embodiments, the relevant instruction set may be determined. In at least one of the various embodiments, if process 1000 is running on client computer, a client security application may determine the instruction set from an instruction set bundle provided by a security application server. In at least one of the various embodiments, if process 1000 is running on a server computer, the instruction set may have been randomly generated during the establishment of a communication session with a client security application. And, in at least one of the various embodiments, if process 1000 is participating in a secure storage operation, the instruction set may be generated by the security application server and/or extracted from a storage bundle retrieved from a data store.
At block 1004, in at least one of the various embodiments, process 1000 may determine the necessary values from the instruction set, such as, the seed file ID, offset position, and pass-phrase length. At block 1006, in at least one of the various embodiments, process 1000 may determine the pass-phrase from a seed file based on the instruction set values.
At block 1008, in at least one of the various embodiments, process 1000 may generate the transport key from the passphrase. In at least one of the various embodiments, various deterministic techniques may be employed to generate the transport key from the pass-phrase. For example, in at least one of the various embodiments, a one-way cryptographically secure hash algorithm may be employed to generate the transport key from the pass-phrase. Next, control may be returned to a calling process.
FIG. 11 shows a flowchart of process 1100 for key generation during encryption of data in accordance with at least one of the various embodiments. After a start block, at block 1102, in at least one of the various embodiments, an initial transport key may be generated based on an instruction set as described above.
At block 1104, in at least one of the various embodiments, the first portion of the data may be encrypted using the initial transport key. In at least one of the various embodiments, the data may be compressed and then encrypted depending on the configuration of the security application.
In at least one of the various embodiments, one or more various symmetric or asymmetric compression algorithms may be employed. Likewise, one or more encryption protocols may be employed. In at least one of the various embodiments, the encryption/decrypt may be arranged to use the initial transport key to perform symmetric cryptographic operation on the data.
In at least one of the various embodiments, during the cryptographic operation (compression, encryption) performed on the first portion of data, the security application may determinately produce resultant information that is stored in a workspace memory. In at least one of the various embodiments, this information may be produced as a side-effect of the particular cryptographic operations being performed. Or, in some embodiments, it may be deliberately generated from the first data portion and/or the first cypher data portion.
At block 1106, in at least one of the various embodiments, the encrypted first portion of data may be provided to an appropriate endpoint (e.g., a client security application or a security application server). In at least one of the various embodiments, if the data is encrypted for storage the encrypted data may be accumulated locally until it stored as part of an encrypted storage bundle.
At block 1108, in at least one of the various embodiments, a new transport key may be generated based in part on cryptographic information that was generated when the first portion of data was encrypted (in block 1104) and stored in the workspace memory. In at least one of the various embodiments, a portion or the entirety of the data in the workspace memory may be cryptographically hashed with the previous transport key to produce the new transport key.
At block 1110, in at least one of the various embodiments, a next portion of data may be encrypted using the new transport key. Similar, as described in block 1104, the workspace memory will be filled with new information corresponding the next portion of the data.
At block 1112, in at least one of the various embodiments, the encrypted next portion of data may be provided to the appropriate endpoint. In at least one of the various embodiments, if the data is encrypted for storage the encrypted data may be accumulated locally until it stored as part of an encrypted storage bundle. At decision block 1114, in at least one of the various embodiments, if more data is available for encryption, control may loop back to block 1108; otherwise, control may be returned to a calling process.
FIG. 12 shows a flowchart of process 1200 for key generation during decryption of data in accordance with at least one of the various embodiments. In at least one of the various embodiments, decryption may be considered the inversion of encryption (process 1200).
After a start block, at block 1202, in at least one of the various embodiments, an initial transport key may be generated based on an instruction set as described above. In at least one of the various embodiments, since both sides of the communication know the instruction set the initial transport key will be the same. In at least one of the various embodiments, the current operation is part of a secure storage load operation, the instruction set may be retrieved from the encrypted data bundle. At block 1204, in at least one of the various embodiments, the first portion of the encrypted data may be decrypted using the initial transport key. In at least one of the various embodiments, the decryption step may be arranged to fill a workspace memory based on the results of the cryptographic operations similarly as described for block 1104. At block 1206, in at least one of the various embodiments, the decrypted first portion of encrypted data may be provided to the appropriate endpoint. At block 1208, in at least one of the various embodiments, a new transport key may be generated based in part on cryptographic information that was generated when the first portion of encrypted data was decrypted (in block 1204) and stored in the workspace memory. In at least one of the various embodiments, a portion or the entirety of the data in the workspace memory may be cryptographically hashed with the previous transport key to produce the new transport key.
At block 1210, in at least one of the various embodiments, a next portion of encrypted data may be decrypted using the new transport key. Similarly as described in block 1204, the workspace memory will be filled with new information corresponding the next portion of the data.
At block 1212, in at least one of the various embodiments, the decrypted next portion of the encrypted data may be provided to the appropriate endpoint. At decision block 1214, in at least one of the various embodiments, if more encrypted data is available for decryption, control may loop back to block 1208; otherwise, control may be returned to a calling process.
Illustrative Logical Architecture for Secure Storage of Shared Documents
FIG. 13 illustrates a logical schematic of system 1300 for secure storage of shared documents in accordance with at least one of the various embodiments. In at least one of the various embodiments, except differences described below, system 1300 may be similar to system 400 shown in FIG. 4. Accordingly, in at least one of the various embodiments, application server computer 1302 may be a network computer, such as, network computer 300.
Similarly, in at least one of the various embodiments, application server computer 1302 may include secure storage application 1308, and application 1304. Secure storage application 1308 may include one or more components, such as, core 1310. In some embodiments, application server computer 1302 may include one or more data storage systems, such as, data store 1306. In at least one of the various embodiments, data store 1306 may be file system, database, or the like. In at least one of the various embodiments, additional data storage (not shown) may be remotely located in distributed file system, cloud based storage, or the like. Also, in at least one of the various embodiments, core 1310 may be arranged similar to core 418 in FIG. 4 and may be considered an encryption engine for performing cryptographic operations.
In at least one of the various embodiments, secure storage application 1308 may be arranged to provide one or more application programming interfaces (APIs) 1312 that enable an application, such as application 1304, to provide data that may be encrypted for secure storage. In at least one of the various embodiments, secure storage application 1308 may be provided data such as a file or document that may be encrypted.
In at least one of the various embodiments, secure storage application 1308 may generate an instruction set (as described above) and employ the instruction set to generate a pass phrase from a seed file. The pass phrase may then be used to generate an encryption key that may be used for encrypting the data that may be provided by an application, such as, application 1304.
In at least one of the various embodiments, secure storage application 1308 may then encrypt the provided data. After encrypting the provided data secure storage application 1308 may generate a header that includes the instruction set information, the last cache/working set values that were generated by the encryption engine (if any), as well as, any additional meta-data, such as, as checksums, file size information, or the like. Also, in at least one of the various embodiments, the entire seed file that was used to generate the pass phrase from the instruction may be included in the header information. In at least one of the various embodiments, header information may be then may be asymmetrically encrypted using a public key that may be provided by application 1304.
In at least one of the various embodiments, the header information may be encrypted using the application or services provided by the application or other processes. Accordingly, in at least one of the various embodiments, secure storage application 1308 may provide the header information to a cryptographic service (or the application) for encryption rather than being provided a public key from application 1304.
In at least one of the various embodiments, secure storage application 1308 may then generate a secure bundle that includes a unique identifier, the encrypted header information, the public key used to encrypt the header, and the encrypted data. In at least one of the various embodiments, the secure bundle may be returned to the caller that provided the data for encryption.
In at least one of the various embodiments, decryption may be generally considered to be the inverse of the encryption steps. Accordingly. To decrypt the data included in a secure bundle, a caller, such as, application 1304 may provide the secure bundle and a private key that corresponds to the public key used to encrypt the header information to secure storage application 1308.
In at least one of the various embodiments, secure storage application 1308 may use the private key to decrypt the encrypted header information to access the information needed to decrypt the data. Thus, in at least one of the various embodiments, secure storage application 1308 will use the instruction set information from the header to generate a pass phrase from a seed file (similar to seed files used by security applications described above) that may be used for generating that same valued encryption key that was used to encrypt the data. Also, in at least one of the various embodiments, if the encryption engine requires a corresponding cache/working-set data, it will also be retrieved from the decrypted header information. Using the encryption key and the cache values to seed to the encryption engine (in core 1310), secure storage application 1308 may decrypt the data included in the secure bundle and provide it unencrypted data to the caller (e.g., application 1304).
In at least one of the various embodiments, secure storage application 1308 may not have access to one or more of the cryptographic used to encrypt the header. For example, the application may have encrypted the header without providing the key to the secure storage application. In such cases, in at least one of the various embodiments, secure storage application 1308 may provide the header to application 1304, or some other cryptographic service, for decryption.
In at least one of the various embodiments, a shared public key may be used for cryptography operations. In this case, several clients may employ the same public key that may be used for encrypting the header information that is included in a secure bundle. In some embodiments, the secure storage application may be provided a private key that corresponds to the shared public key that may be used to decrypt the header information of secure bundles. In at least one of the various embodiments, more than one application may add their public key to the secure bundle along with a corresponding encrypted header.
Further, in at least one of the various embodiments, application server computer 1302 is arranged to include one or more sensors for determining geolocation information (e.g., GPS), monitoring electrical power conditions (e.g., voltage sensors, current sensors, frequency sensors, and so on), monitoring weather (e.g., thermostats, barometers, anemometers, humidity detectors, precipitation scales, or the like), or the like.
For example, in at least one embodiment, geolocation information (such as latitude and longitude coordinates, or the like) is collected by a hardware GPS sensor and subsequently employed to introduce entropy for generating a network packet key from a passphrase. Similarly, in at least one embodiment, weather information (such as temperature, atmospheric pressure, wind speed, humidity, or the like) is collected by a hardware weather sensor and subsequently employed to introduce entropy. Additionally, in at least one embodiment, electrical power information (such as voltage, current, frequency, or the like) is collected by a hardware electrical power sensor and subsequently employed to introduce entropy for generating a network packet key from a passphrase.
FIG. 14A-14C illustrates logical representations a security bundle and some of its constituent components in accordance with at least one of the various embodiments.
FIG. 14A illustrates a logical representation of secure bundle 1400 in accordance with at least one of the various embodiments. In some embodiments, if data is provided for encryption, a secure storage application may generate secure bundles, such as secure bundle 1400. In some embodiments, secure bundle 1400 may comprise, various parts, such as, unique identifier 1402, public key collection 1404, encrypted header collection 1406, encrypted data 1408, or the like, or combination thereof. In some embodiments, each secure bundle may be associated with a unique identifier that may be used for identifying and/or referencing the secure bundle after it has been generated. For example, unique identifier 1402 may be a unique value such as a Globally Unique Identifier (GUID).
In some embodiments, one or more public keys, such as, public keys 1404, associated with one or more callers of the secure storage application may be included in a secure bundle. In some embodiments, more than one user may be sharing the same document. Accordingly, they each may provide their own individual public keys to the secure storage application. In some embodiments, the public keys of each party that has secured the documents may be stored in public keys 1404. Similarly, the header information may be encrypted for each user using their provided public key. Accordingly, each set of encrypted header information may be stored in secure bundle 1400 in encrypted headers 1406. In at least one of the various embodiments, the information set and cache/working set information will have the same values for each user. Though, the encrypted versions of the header information may be different since they may be encrypted using different/separate public keys. Accordingly, only the holder of the private key that corresponds to the public key used to encrypt a given set of header information may be able to decrypt it.
FIG. 14B illustrates a logical representation of header 1410 that may be included in a secure bundle, such as, secure bundle 1400. In some embodiments, header 1410 may be include instruction set 1412, cache/seed values 1414, and meta-data 1416. In some embodiments, instruction set 1412 may be an instruction set for generating an encryption key (same as described for generating transport keys). In some embodiments, cache/seed values 1414 may be values generated during the encryption of the data by the encryption engine. Also, in some embodiments, meta-data 1416 may be arranged to include information such as check-sum values, file size information, creation date, a public key, unique identifiers, or the like. For example, a check-sum value from the meta-data field may be used to confirm that a file has been decrypted correctly. Likewise, a public key or other unique value may be included to enable confirmation that an encrypted header has been decrypted successfully. For example, the secure storage application may confirm that the public key (or other unique identifier) included in the header information matches a public key (or other unique identifier) associated with a user to determine the header information was decrypted correctly.
FIG. 14C illustrates a logical representation of the public keys and headers for a secure bundle, such as, secure bundle 1400. In some embodiments, one or more public keys, such as, public keys 1404 and one or more set of encrypted header information, such as encrypted header information 1406 may be included in secure bundle 1400. In this example, public key 1418 may correspond to header 1420. Thus, in at least one of the various embodiments, only users (or applications) that have access to the private key that corresponds to public key 1418 may decrypt header 1420 to extract the instruction set that may be used to generate the encryption key and the cache/seed values that are necessary to decrypt the data. As illustrated in FIG. 14C, one or more public key/header pairs may be included in a secure bundle. Accordingly, in at least one of the various embodiments, a holder of a private key that corresponds to one of the public keys may be enabled to decrypt header information to access the information for decrypting encrypted data 1408.
Generalized Operations for Secure Storage for Shared Documents
The operation of certain aspects of the invention will now be described with respect to FIGS. 15-18. In at least one of various embodiments, processes 1500, 1600, 1700, and 1800 described in conjunction with FIGS. 15-18, respectively, may be implemented by and/or executed on a network computer, such as network computer 300 of FIG. 3. In other embodiments, these processes or portions of these processes may be implemented by and/or executed on a plurality of network computers, such as network computer 300 of FIG. 3. Further, in other embodiments, these processes or portions of these processes may be implemented by and/or executed on one or more client computers, such as client computer 200 as shown in FIG. 2. Also, in at least one of the various embodiments, these processes or portions of these processes may be implemented by and/or executed on one or more cloud instances operating in one or more cloud networks. However, embodiments are not so limited and various combinations of network computers, client computer, cloud computer, or the like, may be utilized.
FIG. 15 illustrates an overview flowchart for process 1500 for encrypting data for secure storage of shared documents in accordance with at least one of the various embodiments. After a start block, at block 1502, in at least one of the various embodiments, data and a public key may be provided to a secure storage application. In at least one of the various embodiments, the public key may be provided prior to the data. For example, in at least one of the various embodiments, a common public key may be provided to use for securing multiple documents for an organization.
In at least one of the various embodiments, the common public keys, as well, as other cryptographic information may be obtained and/or stored in a cryptographic key vault. Also, in at least one of the various embodiments, common keys may be generated, stored, or retrieved using a public key management system. Also, in at least one of the various embodiments, hardware security modules (HSMs), such as, HSM 252, HSM 340, or the like, may be employed for generating, storing, or retrieving, various cryptographic information, such as, common public keys.
At block 1504, in at least one of the various embodiments, a unique identifier to associate with the provided data may be generated. In at least one of the various embodiments, the unique identifier may be a GUID. In at least one of the various embodiments, configuration information or information passed through the API of the secure storage application may include additional formatting/patterning information that may be used to generate the unique identifier. For example, in at least one of the various embodiments, the secure storage application may be configured to use prefix values, suffix values, or the like, when generating unique identifiers.
At block 1506, in at least one of the various embodiments, an instruction set may be generated. In at least one of the various embodiments, an instruction set may be generated as described above. In at least one of the various embodiments, instruction set information may include, a seed file identifier, an offset value, and a length value.
At block 1508, in at least one of the various embodiments, an encryption key may be generated based on the instruction set. In at least one of the various embodiments, the seed file identifier in the instruction set may be used to determine one of a plurality of seed files. The offset value included in the instruction set may be used to find a starting point in the seed file. And, the length value in the instruction set may be used to determine a number of characters to copy from the seed file (starting at the offset). These characters may be used to as a pass phrase to generate an encryption key. In at least one of the various embodiments, the encryption key may be generated cryptographically hashing the pass phrase, or the like.
At block 1510, in at least one of the various embodiments, the provided data may be encrypted using the encryption key that was generated based on the instruction set. In at least one of the various embodiments, the data may be encrypted similar to the way communication is encrypted using a security application, such as, security application 320, except that the provided data will be encrypted by the secure storage application rather than data that that is part of a communication stream over a network.
At block 1512, in at least one of the various embodiments, optionally, the encryption engine may provide the values from a cache used during the encryption. In at least one of the various embodiments, this step may be optional if the encryption engine uses an encryption process that does not generate accessible cache and/or the cache memory is not required for decryption. Otherwise, since the cache values may be required for decryption, they may be gathered from the encryption engine.
At block 1514, in at least one of the various embodiments, a header may be generated that include, header information, such as, the instruction set, the cache values, and optionally, one or more meta-data values. At block 1516, in at least one of the various embodiments, the header may be encrypted using the public key that may have been provided to the secure storage application.
At block 1518, in at least one of the various embodiments, a secure bundle that includes the unique identifier, the public key, the encrypted header, and the encrypted data may be generated. In at least one of the various embodiments, the secure bundle may be generated by appending the unique identifier, the public keys, the encrypted header information, and the encrypted data into a single data blob or file that that may be provided to the user or application that is requesting the data be encrypted. Next, control may be returned to a calling process.
FIG. 16 illustrates a flowchart for process 1600 for decrypting data that may be included in secure bundle for secure storage of shared documents in accordance with at least one of the various embodiments. After a start block, at block 1602, in at least one of the various embodiments, the secure bundle and a public key or private key may be provided. In at least one of the various embodiments, if a user or application needs to access the encrypted data contained in a secure bundle, they provide the secure bundle (or a reference to it) to the secure storage application. Also, they must provide their private key that corresponds to the public key that was used when generating the secure bundle. In some embodiments, the public key may be provided. In some embodiments, the secure storage application request the private key from another service using the public key.
At block 1604, in at least one of the various embodiments, the encrypted header information may be decrypted using the private key that corresponds to the public key that was used to encrypt when the secure bundle was generated. In at least one of the various embodiments, the header information may include meta-data such as a copy of the public key that was used to encrypt it. Accordingly, in at least one of the various embodiments, each time encrypted header information is decrypted with a private key, the public key of the decrypting process may compared with the public key values stored in the header to confirm that the header was indeed encrypted using the public key that corresponds to the private key used for decrypting.
In at least one of the various embodiments, if there are two or more header information sets, the secure storage application may iterate over each header information set until it finds the one that decrypts with the user's/application's private key. Meta-data, such as, a unique identifier or public key in the header information may be tested to determine if the correct header information has been decrypted.
In at least one of the various embodiments, a public key associated with the secure storage application was not used to encrypt the header, the secure storage application will be unable to decrypt the header and its associated data. In at least one of the various embodiments, the secure storage application may be configured to forward the encrypted file (include the header information) to the application (e.g., application 321, application 1304, or the like), or other cryptographic service.
At block 1606, in at least one of the various embodiments, the instruction set may be obtained from the header. At block 1608, in at least one of the various embodiments, the encryption key may be generated based on the instruction set information. In at least one of the various embodiments, the encryption key may be generated using a seed file and the instruction set information as described above.
At block 1610, in at least one of the various embodiments, optionally, the encryption engine cache values may be obtained from the header. This step is optional because some encryption engines/encryption protocols may not require cache values to decrypt data.
At block 1612, in at least one of the various embodiments, the data portion of the secure bundle may be decrypted using the encryption key and the cache values. In some embodiments, the encryption key and cache values may be loaded into the encryption engine to seed it in preparation for decrypting the data. Next, control may be returned to a calling process.
FIG. 17 shows a flowchart of process 1700 to secure data using a secure storage application in accordance with at least one of the various embodiments. After a start block, at block 1702, in at least one of the various embodiments, the data being securely stored may be determined. For example, in at least one of the various embodiments, a server application coupled with a secure storage application may provide the data to be secured to the secure storage application. In at least one of the various embodiments, the server application may employ an API provided by the secure storage application to securely store the data.
At block 1704, in at least one of the various embodiments, the secure storage application may generate an instruction set to employ for generating the initial encryption key for encrypting the data. In at least one of the various embodiments, the secure storage application may employ the same procedures as described in for process 900 to generate an instruction set.
At block 1706, in at least one of the various embodiments, the secure storage application may generate the initial encryption key based on the generated instruction set. In at least one of the various embodiments, rather than generating an encrypted instruction set bundle and providing it to a client security application, the secure storage application may directly employ the instruction set information to generate a encryption key. At block 1708, in at least one of the various embodiments, the secure storage application may employ the encryption key to encrypt the data.
At block 1710, in at least one of the various embodiments, the secure storage application may encrypt the instruction set using public key that is known only the secure storage application. In at least one of the various embodiments, the public key used for encrypting the instruction set may be part of an administration key pair that includes a public key and a corresponding private key owned by the secure storage application. In at least one of the various embodiments, the key pair may be obtained from and/or stored in a cryptographic key vault. Also, in at least one of the various embodiments, this key pair may be generated, stored, or retrieved using a public key management system. Also, in at least one of the various embodiments, hardware security modules (HSMs), such as, HSM 252, HSM 340, or the like, may be employed for generating, storing, or retrieving, various cryptographic information, such as, public/private key pairs. At block 1712, in at least one of the various embodiments, the encrypted instruction set may be appended (or pre-pended) to the encrypted data to generate an encrypted data bundle. At block 1714, in at least one of the various embodiments, the encrypted data bundle may be stored in the data store. Next, control may be returned to a calling process.
In at least one of the various embodiments, secure data storage may be provided for files in a file system, and/or data that is stored a database. In at least one of the various embodiments, in the case of databases, the scope of the data bundle is an individual column value for a row in a table. Accordingly, the server application may request that one or more columns in a database table are encrypted. Thus, in at least one of the various embodiments, each encrypted value in the database is bundled with its own instruction set.
In at least one of the various embodiments, the security application may receive unencrypted data from the server application and encrypt as described above. In at least one of the various embodiments, the security application may encrypt the data and provide it back to the server application enabling the server application to store the data in a file, database, or the like.
FIG. 18 shows a flowchart of process 1800 that loads encrypted data from data storage using a secure storage application in accordance with at least one of the various embodiments. After a start block, at block 1802, in at least one of the various embodiments, the encrypted data may be determined. For example, in at least one of the various embodiments, a server application coupled with a secure storage application may provide a query/request to the security application sever to retrieve encrypted data that is stored in the data store. At block 1804, in at least one of the various embodiments, the secure storage application may retrieve the encrypted data bundle from storage and extract the encrypted instruction set from the encrypted bundle.
At block 1806, in at least one of the various embodiments, the secure storage application may decrypt the instruction set using the private key that corresponds to the public key was employed to encrypt it. At block 1808, in at least one of the various embodiments, the secure storage application may generate the initial encryption key based on the instruction set information. At block 1810, in at least one of the various embodiments, the security application service may decrypt the requested data by employing the encryption key. At block 1812, in at least one of the various embodiments, the decrypted data may be provided to the requestor. Next, control may be returned to a calling process.
It will be understood that each block of the flowchart the illustrations, and combinations of blocks in the flowchart illustrations, can be implemented by computer program instructions. These program instructions may be provided to a processor to produce a machine, such that the instructions, which execute on the processor, create means for implementing the actions specified in the flowchart block or blocks. The computer program instructions may be executed by a processor to cause a series of operational steps to be performed by the processor to produce a computer-implemented process such that the instructions, which execute on the processor to provide steps for implementing the actions specified in the flowchart block or blocks. The computer program instructions may also cause at least some of the operational steps shown in the blocks of the flowcharts to be performed in parallel. Moreover, some of the steps may also be performed across more than one processor, such as might arise in a multi-processor computer system. In addition, one or more blocks or combinations of blocks in the flowchart illustration may also be performed concurrently with other blocks or combinations of blocks, or even in a different sequence than illustrated without departing from the scope or spirit of the invention.

## Claims

1. A method for managing data storage using a network computer having one or more processor devices that perform actions, comprising:
employing the one or more processor devices to generate instruction set information that references at least a seed file that is installed on the network computer, wherein the seed file is determined from a plurality of seed files based on the instruction set information;
employing the one or more processor devices to extract a pass phrase from the seed file based on the instruction set information;
employing the one or more processor devices to generate an encryption key based on the instruction set information and the pass phrase that is extracted from the seed file;
employing the one or more processor devices to launch and execute an encryption engine, on the network computer, to encrypt data using the encryption key; and
employing the one or more processor devices to generate a secure bundle that includes a public key, the encrypted header information, and the encrypted data, wherein the secure bundle is presented to a provider of the data and the public key.

2. The method of claim 1, wherein the seed file is based on an offset value and a length value that are included in the instruction set information.

3. The method of claim 1, wherein the provider includes a user that provided the data and the public key or an application that provided the data and the public key.

4. The method of claim 1, further comprising generating header information that includes the instruction set information, wherein the header information is encrypted using the public key.

5. The method of claim 1, wherein the instruction set information includes one or more of an entity identifier, a platform identifier, or the public key.

6. The method of claim 1, further comprising:
generating a transport key based on the instruction set information; and
employing the encryption engine to employ the transport key to initially encrypt the data communicated between an application server and an application client; and
enabling the application server to generate one or more other transport keys for subsequent communication between the application server and the application client.

7. The method of claim 1, wherein generating the encryption key further comprises employing a signal provided by a sensor to introduce entropy in the generation of the encryption.

8. The method of claim 1, further comprising:
decrypting encrypted header information that is included in the secure bundle using a private key that corresponds to the public key that was used to encrypt the header information;
accessing the instruction set information that is included in the decrypted header information;
generating the encryption key based on the instruction set information;
decrypting the encrypted data that is included in the secure bundle using the encryption key, wherein the decrypted data is presented to the provider.

9. A system for managing data storage, comprising:
a network computer, comprising:
a transceiver that communicates over the network;
a memory that stores at least instructions; and
one or more processor devices that execute instructions that perform actions, including:
generating instruction set information that references at least a seed file that is installed on the network computer, wherein the seed file is determined from a plurality of seed files based on the instruction set information;
extracting a pass phrase from the seed file based on the instruction set information;
generating an encryption key based on the instruction set information and the pass phrase that is extracted from the seed file;
launching and executing an encryption engine, on the network computer, to encrypt data using the encryption key; and
generating a secure bundle that includes a public key, the encrypted header information, and the encrypted data, wherein the secure bundle is presented to a provider of the data and the public key.

10. The system of claim 9, wherein the seed file is based on an offset value and a length value that are included in the instruction set information.

11. The system of claim 9, wherein the provider includes a user that provided the data and the public key or an application that provided the data and the public key.

12. The system of claim 9, further comprising generating header information that includes the instruction set information, wherein the header information is encrypted using the public key.

13. The system of claim 9, wherein the instruction set information includes one or more of an entity identifier, a platform identifier, or the public key.

14. The system of claim 9, further comprising:
generating a transport key based on the instruction set information; and
employing the encryption engine to employ the transport key to initially encrypt the data communicated between an application server and an application client; and
enabling the application server to generate one or more other transport keys for subsequent communication between the application server and the application client.

15. The system of claim 9, wherein generating the encryption key further comprises employing a signal provided by a sensor to introduce entropy in the generation of the encryption.

16. The system of claim 9, further comprising:
decrypting encrypted header information that is included in the secure bundle using a private key that corresponds to the public key that was used to encrypt the header information;
accessing the instruction set information that is included in the decrypted header information;
generating the encryption key based on the instruction set information;
decrypting the encrypted data that is included in the secure bundle using the encryption key, wherein the decrypted data is presented to the provider.

17. A processor readable non-transitory storage media that includes instructions for managing data storage, wherein execution of the instructions by one or more processor devices performs actions, comprising:
employing the one or more processor devices to generate instruction set information that references at least a seed file that is installed on the network computer, wherein the seed file is determined from a plurality of seed files based on the instruction set information;
employing the one or more processor devices to extract a pass phrase from the seed file based on the instruction set information;
employing the one or more processor devices to generate an encryption key based on the instruction set information and the pass phrase that is extracted from the seed file;
employing the one or more processor devices to launch and execute an encryption engine, on the network computer, to encrypt data using the encryption key; and
employing the one or more processor devices to generate a secure bundle that includes a public key, the encrypted header information, and the encrypted data, wherein the secure bundle is presented to a provider of the data and the public key.

18. The media of claim 17, wherein the seed file is based on an offset value and a length value that are included in the instruction set information.

19. The media of claim 17, wherein the provider includes a user that provided the data and the public key or an application that provided the data and the public key.

20. The media of claim 17, further comprising generating header information that includes the instruction set information, wherein the header information is encrypted using the public key.

21. The media of claim 17, wherein the instruction set information includes one or more of an entity identifier, a platform identifier, or the public key.

22. The media of claim 17, further comprising:
generating a transport key based on the instruction set information; and
employing the encryption engine to employ the transport key to initially encrypt the data communicated between an application server and an application client; and
enabling the application server to generate one or more other transport keys for subsequent communication between the application server and the application client.

23. The media of claim 17, wherein generating the encryption key further comprises employing a signal provided by a sensor to introduce entropy in the generation of the encryption.

24. The media of claim 17, further comprising:
decrypting encrypted header information that is included in the secure bundle using a private key that corresponds to the public key that was used to encrypt the header information;
accessing the instruction set information that is included in the decrypted header information;
generating the encryption key based on the instruction set information;
decrypting the encrypted data that is included in the secure bundle using the encryption key, wherein the decrypted data is presented to the provider.