Abstract:
The present disclosure is directed to secure computations and transmission of encrypted data over a network. Two unequal unsigned integer numbers are used as keys, which are kept secret by users. Each key is supplied as the seed to a uniform pseudorandom number generator, and follows an algorithm to encrypt and decrypt a communications channel between two endpoints on the network. The communications channel is a stream of bits representing any data that may be represented or stored by a computer capable of processing binary data. In one illustrative embodiment, a network has multiple endpoints, such as different terminals disposed at different locations (for example, terminals at various branches of a financial institution that are connected to a common network). Using keys that are specific to transactions between specified terminals allows for greater security of the encrypted transmissions.

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
       [0001]    This application claims the benefit of U.S. Provisional Application No. 62/324,504, filed Apr. 19, 2016, the disclosure of which is incorporated herein by reference in its entirety. 
     
    
     BACKGROUND 
       [0002]    Maintaining data confidentiality is an important concern for all computing device users regardless of task(s) performed. Encryption schemes represent one form of technology directed towards securing data when stored in memory and/or transmitted over networks. Many systems use a single encryption protocol for all communications over a network, regardless of the differences between various users. Should the encryption scheme be compromised, this could affect all communications over the network. One illustrative example of an encryption system is disclosed in U.S. Pat. No. 9,306,738, which issued Apr. 5, 2016 to Microsoft Technology Licensing, LLC, the disclosure of which is incorporated by reference herein in its entirety. 
         [0003]    An encryption system or method that allowed for secure encryption between various endpoints on a network using a single protocol that could be followed by all endpoints and renders the deciphering by an unauthorized third party computationally impractical, would be an improvement in the art. 
       SUMMARY 
       [0004]    This summary is provided to introduce a selection of representative concepts in a simplified form that are further described below. This summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used in any way that would limit the scope of the claimed subject matter. 
         [0005]    The present disclosure is directed to secure computations and transmission of encrypted data over a network. Two unequal unsigned integer numbers are used as keys, which are kept secret by users. In some illustrative embodiments, each key is supplied as the seed to a uniform pseudorandom number generator, and follows an algorithm to encrypt and decrypt a communications channel between two endpoints on the network. In other illustrative embodiments, each key is supplied as the seed to a uniform pseudorandom eight-bit unsigned integer generator. The communications channel is a stream of bits representing any data that may be represented or stored by a computer capable of processing binary data. In one illustrative embodiment, a network has multiple endpoints, such as different terminals disposed at different locations (for example, terminals at various branches of a financial institution that are connected to a common network). Using keys that are specific to transactions between specified terminals allows for greater security of the encrypted transmissions. 
     
    
     
       DESCRIPTION OF THE DRAWINGS 
         [0006]    It will be appreciated by those of ordinary skill in the art that the various drawings are for illustrative purposes only. The nature of the present disclosure, as well as other embodiments in accordance with this disclosure, may be more clearly understood by reference to the following detailed description, to the appended claims, and to the several drawings. 
           [0007]      FIG. 1A  is an image of a simulation of a system in accordance with a first embodiment of the present disclosure being used to encrypt and decrypt a communication. 
           [0008]      FIG. 1B  is an image of a simulation of a system in accordance with a second embodiment of the present disclosure being used to encrypt and decrypt a communication. 
           [0009]      FIG. 2  is a block diagram representing example non-limiting networked environments in which various embodiments described herein can be implemented. 
           [0010]      FIG. 3  is a block diagram representing an example non-limiting computing system or operating environment in which one or more aspects of various embodiments described herein can be implemented. 
       
    
    
     DETAILED DESCRIPTION 
       [0011]    The present disclosure relates to apparatus, systems and methods for secure computations and transmission of encrypted data over a network. It will be appreciated by those skilled in the art that the embodiments herein described, while illustrative, are not intended to so limit this disclosure or the scope of the appended claims. Those skilled in the art will also understand that various combinations or modifications of the embodiments presented herein can be made without departing from the scope of this disclosure. All such alternate embodiments are within the scope of the present disclosure. 
         [0012]    Turning to  FIG. 1A , a first embodiment of a simulation of a system operating in accordance with the present disclosure is depicted. A communications window, shown at  100  depicts one example of a display that a user operating an endpoint of the system may view at a single endpoint when sending or receiving a communication  200 . The operations conducted on the communication input at a first endpoint  102  are graphically depicted showing one example of an encryption calculation. Similarly, the operations conducted on the communication for output at a second endpoint  104  are graphically depicted showing one example of a decryption calculation. 
         [0013]    In one illustrative embodiment, the system or method in accordance with this disclosure utilizes an algorithm that encrypts and decrypts a communications channel between two endpoints, such as those indicated at  102  and  104 . The communications channel is a stream of bits representing any data that may be represented or stored by a computer capable of processing binary data. In the depicted example, the data comprises a length of ASCII text, which is converted to a hexadecimal string for encryption. It will be appreciated that this is merely illustrative and that any types of data files may be encrypted using the principles of the present disclosure. 
         [0014]    In the depicted embodiment, the algorithm requires two keys, that is, unsigned integer numbers, designated as KeyA and KeyB. Both endpoints know both KeyA and KeyB. KeyA and KeyB must not be equal. Both KeyA and KeyB are kept secret. 
         [0015]    In some embodiments, the various endpoints on a network may each have a particular set of keys for communicating with other specified endpoints on the network. For example, each endpoint could have a particular set of keys that are used only to communicate with a single other endpoint (or a subset of other endpoints). Then, even if the communication channel between two particular endpoints were compromised, others would not be. 
         [0016]    Each key is a number supplied as the seed to a uniform pseudorandom real number generator. Thus, there are a number of uniform pseudorandom real number generators corresponding to the number of keys used. In this example, there are two keys and thus two pseudorandom real number generators used, although it will be appreciated that in other embodiments other numbers of keys and corresponding pseudorandom real number generators may be used. In the depicted embodiment of  FIG. 1A , the keys are designated Seed1 and Seed2 and are 5923 and 45000, respectively. 
         [0017]    For purposes of this description, one uniform pseudorandom real number generator will be referred to as the A-PRNG, and the other as B-PRNG. The uniform pseudorandom real number generators generate a number in the range [0.0,MAX]. The value of MAX can be any positive real number. MAX=10.0 is suggested as sufficient. 
         [0018]    For purposes of this description, the algorithm will be described in the context of two endpoints communicating with each other, PNTA and PNTB. The algorithm description will refer to PRNG1 and PRNG2. PRNG1 and PRNG2 refer to either A-PRNG or B-PRNG as shown in Table 1 below. 
         [0000]    
       
         
               
               
               
             
           
               
                 TABLE 1 
               
               
                   
               
               
                 Endpoint 
                 Encryption 
                 Decryption 
               
               
                   
               
             
             
               
                 PNTA 
                 PRNG1 = A-PRNG seeded with KeyA 
                 PRNG1 = B-PRNG seeded with KeyB 
               
               
                   
                 PRNG2 = B-PRNG seeded with KeyB 
                 PRNG2 = A-PRNG seeded with KeyA 
               
               
                 PNTB 
                 PRNG1 = A-PRNG seeded with KeyB 
                 PRNG1 = B-PRNG seeded with KeyA 
               
               
                   
                 PRNG2 = B-PRNG seeded with KeyA 
                 PRNG2 = A-PRNG seeded with KeyB 
               
               
                   
               
             
          
         
       
     
         [0019]    The length of KeyA and KeyB in bits is equal to 2K where K may be chosen as any integer greater than or equal to 4. The greater the value of K the greater the secureness of the encryption. 
         [0020]    Two constant parameters are specified by the algorithm. 
         [0000]        M= 2 (B-11) , 
         [0000]        N= 2 (B-7) , 
         [0021]    where B is the length of the cyclic redundancy check, CRC, in bits. 
         [0022]    Three variable parameters are initialized as follows:
       DevSumThreshold is assigned the value MAX/2*BITS, where BITS has a suggested value of 160,   CRCByteCount is assigned the value 8.   CRC is assigned the value of KeyB.       
 
         [0026]    Associated with the CRCByteCount is a constant, CRCByteCntMax, whose suggested value is 64. 
         [0027]    In the embodiment of  FIG. 1A , the bit stream is encrypted as follows:
       1) A random number is generated by PRNG1, R−A.   2) A random number is generated by PRNG2, D−B.   3) Calculate Deviation=R−A−D−B.   4) A running sum of the absolute value of the Deviation is maintained, DeviationSum.   5) A running sum of the number of bytes processed is maintained, ByteCnt.   6) If Deviation is greater than or to equal zero, then the next bit in the bit stream is inverted, otherwise it is not inverted. The resulting bit stream is the encrypted bit stream. In the depicted embodiment, this is designated at  1000 A displayed at endpoint  102 .   7) If DeviationSum is greater than DevSumThreshold, then the following processing is performed, otherwise step 8 is performed next.
           7a) A new CRC is computed from the last CRCByteCount number of bytes of the unencrypted bit stream. If the CRCByteCount is greater than ByteCnt, then the CRC is calculated from the last ByteCnt number of bytes of the unencrypted bit stream. The seed value for the new computed CRC is the current value of CRC.   7b) The existing PRNG1 is destroyed, and a new PRNG1 is created using the CRC as the seed number.   7c) DevSumThreshold is recomputed as the value of the CRC divided by M. If DevSumThreshold is less than MinThreshold, then DevSumThreshold is set to MinThreshold. Suggested value for MinThreshold is 100.0.   7d) CRCByteCount is recomputed as the integer division of the value of the CRC divided by N. If CRCByteCount is less than or equal to zero, then CRCByteCount is set to 8. If CRCByteCount is greater than CRCByteCntMax, then CRCByteCount is set to CRCByteCntMax.   7e) DeviationSum is reset to zero.   
           8) The algorithm is repeated from step 1 until all bits have been processed.       
 
         [0041]    The encrypted data stream may then be transmitted to the receiving endpoint, such as depicted endpoint  104 . In the depicted embodiment of  FIG. 1A , this is shown at  1000 B. The bit stream is then decrypted. In the depicted embodiment, this occurs as follows:
       1) A random number is generated by PRNG1, R−A.   2) A random number is generated by PRNG2, D−B.   3) Calculate Deviation=R−A−D−B.   4) A running sum of the absolute value of the Deviation is maintained, DeviationSum.   5) A running sum of the number of bytes processed is maintained, ByteCnt.   6) If Deviation is greater than or to equal zero, then the next bit in the bit stream is inverted, otherwise it is not inverted. The resulting bit stream is the decrypted bit stream. The decrypted bit stream is identical to the original unencrypted bit stream, as shown at  200  in endpoint  104 .   7) If DeviationSum is greater than DevSumThreshold, then the following processing is performed, otherwise step 8 is performed next.
           7a) A new CRC is computed from the last CRCByteCount number of bytes of the decrypted bit stream. If the CRCByteCount is greater than ByteCnt, then the CRC is calculated from the last ByteCnt number of bytes of the decrypted bit stream. The seed value for the new computed CRC is the current value of CRC.   7b) The existing PRNG1 is destroyed and a new PRNG1 is created using the CRC as the seed number.   7c) DevSumThreshold is recomputed as the value of the CRC divided by M. If DevSumThreshold is less than MinThreshold, then DevSumThreshold is set to MinThreshold. Suggested value for MinThreshold is 100.0.   7d) CRCByteCount is recomputed as the integer division of the value of the CRC divided by N. If CRCByteCount is less than or equal to zero, then CRCByteCount is set to 8. If CRCByteCount is greater than CRCByteCntMax, then CRCByteCount is set to CRCByteCntMax.   7e) DeviationSum is reset to zero.   
           8) The algorithm is repeated from step 1 until all bits have been processed.       
 
         [0055]    Optionally, RB number of random bytes may be inserted into the bit stream preceding the beginning of the true unencrypted data. RB may be generated from a uniform pseudorandom integer number generator using the absolute value of (KeyA−KeyB) as the seed and generating a random number in the range [0,255]. The intent of prepending RB random bytes is to mask the values of KeyA and KeyB to someone attacking the beginning of the transmission wherein the transmission of the true encrypted data would otherwise always start with KeyA and KeyB. In the depicted embodiment of  FIG. 1A , RB is 9. 
         [0056]    Turning to  FIG. 1B , a second embodiment of a simulation of a system operating in accordance with the present disclosure is depicted, using like reference numerals to  FIG. 1A  for like elements. A communications window, shown at  100  depicts one example of a display that a user operating an endpoint of the system may view at a single endpoint when sending or receiving a communication  200 . The operations conducted on the communication input at a first endpoint  102  are graphically depicted showing one example of an encryption calculation. Similarly, the operations conducted on the communication for output at a second endpoint  104  are graphically depicted showing one example of a decryption calculation. 
         [0057]    Each key is a bit string supplied as the seed to an eight-bit unsigned integer uniform pseudorandom number generator. Thus, there are a number of eight-bit unsigned integer uniform pseudorandom number generators corresponding to the number of keys used. In this example, there are two keys and thus two eight-bit unsigned integer pseudorandom number generators used, although it will be appreciated that in other embodiments other numbers of keys and corresponding eight-bit unsigned integer pseudorandom number generators may be used. In the depicted embodiment of  FIG. 1B , the keys are designated KeyA and KeyB and are “490mv0Q” and “BM19fRT”, respectively. KeyA and KeyB are bit strings, or equivalently, a number of bit length 2 L . The lengths of KeyA and KeyB in bits are equal to 2 L  where L may be chosen as any integer greater than or equal to 4. The greater the value of L the greater the secureness of the encryption. 
         [0058]    For purposes of this description, one eight-bit unsigned integer uniform pseudorandom number generator will be referred to as A-PRNG, and the other eight bit unsigned integer uniform pseudorandom real number generator, as B-PRNG. A-PRNG and B-PRNG must be identical eight-bit unsigned integer uniform pseudorandom number generators. For purposes of this description, the algorithm will be described in the context of two endpoints communicating with each other, PNTA and PNTB. The algorithm description will refer to PRNG1 and PRNG2. PRNG1 and PRNG2 refer to either A-PRNG or B-PRNG as shown in Table 1 above. 
         [0059]    The algorithm uses two other keys, KeyAA and KeyBB. KeyAA and KeyBB are bit strings (or equivalently, a number of bit length 2 K ) each supplied as the seed to a uniform pseudorandom real number generator. For purposes of this embodiment, one uniform pseudorandom real number generator will be referred to as the AA-PRNG uniform pseudorandom real number generator, and the other as the BB-PRNG uniform pseudorandom real number generator. AA-PRNG is created using KeyAA as the seed. BB-PRNG is created using KeyBB as the seed. BB-PRNG and AA-PRNG use the identical random number generator. BB-PRNG and AA-PRNG generate a number in the range [0.0,MAX]. The value of MAX can be any positive real number. MAX=20.0 is suggested as sufficient. The lengths of KeyAA and KeyBB in bits are equal to 2K where K may be chosen as any integer greater than or equal to 4. The greater the value of K the greater the secureness of the encryption. KeyAA and KeyBB are initialized from successive values returned from PRNG1 and PRNG2, respectively. 
         [0060]    A constant parameter is specified by the algorithm. 
         [0000]        M= 2 (S-11) , 
         [0061]    where S is the length of the cyclic redundancy check, CRC, in bits. 
         [0062]    The algorithm employs a hashing function, HASH. The hashing algorithm is not dictated, but for example, SHA3-256 as defined in NIST publication SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions, FIPS  202 , could be used. The input to HASH is a digest of variable length H bits. Suggested value of H is 256. HASH returns a hash value whose length in bits is equal to H. 
         [0063]    Three variable parameters are initialized as follows:
       1. CRC is initialized from successive values generated by PRNG1, the highest order byte assigned from the first value, the second highest order byte assigned from the second value, and so forth down to the lowest order byte.   2. DevSumThreshold is assigned by setting it equal to a value divided by M. The value is derived by computing the CRC of a hash value. The seed to the CRC computation is the CRC from the previous epoch (for first epoch, it is the initialized CRC). The hash value is the value returned by HASH. The input to HASH is equal to random byte values generated from PRNG1. If DevSumThreshold is less than MinThreshold, then DevSumThreshold is set to MinThreshold. Suggested value for MinThreshold is MAX.   3. DeviationSum is set to zero.       
 
         [0067]    On the transmission side the bit stream is processed as follows:
       a) RB number of random bytes are inserted into the bit stream preceding the beginning of the actual unencrypted data. RB is set equal to a single value generated by PRNG1. RB is in the range [0,255]. If RB is zero, then RB is set equal a default value. A default value of 20 is suggested. RB number of random bytes are then created using successive values generated from PRNG1.   b) The bit stream is shifted as described below in the function, SHIFTBITS.
 
The bit stream is subsequently encrypted bit by bit as follows:
 
1) A random number is generated by AA-PRNG, AA.
 
2) A random number is generated by BB-PRNG, BB.
       
 
       3) Calculate Deviation=AA−BB. 
       [0070]    4) A running sum of the absolute value of the Deviation is maintained, DeviationSum.
 
5) A running sum of the number of bytes processed is maintained, ByteCnt.
 
6) If Deviation is greater than or equal to zero, then the next bit in the bit stream is inverted, otherwise it is not inverted. The resulting bit stream is the encrypted bit stream.
 
7) If DeviationSum is greater than DevSumThreshold, then a new epoch is begun and the following processing is performed, otherwise step 8 is performed next.
       7a) DevSumThreshold is recomputed by setting it equal to a value divided by M. The value is derived by computing the CRC of a hash value. The seed to the CRC computation is the CRC of the previous epoch. The hash value is the value returned by HASH. The input to HASH is filled with random byte values generated from PRNG1. If DevSumThreshold is less than MinThreshold, then DevSumThreshold is set to MinThreshold. Suggested value for MinThreshold is MAX.   7b) The existing AA-PRNG is destroyed, and a new AA-PRNG is created with bit string seed equal to a value returned from HASH. The input to HASH is equal to a bit string completely filled with random values generated from PRNG1.   7c) The existing BB-PRNG is destroyed, and a new BB-PRNG is created with bit string seed equal to a value returned from HASH. The input to HASH is equal to a bit string completely filled with random values generated from PRNG2.   7d) DeviationSum is reset to zero.
 
8) The algorithm is repeated from step 1 until all bits have been processed.
       
 
         [0075]    The encrypted data stream may then be transmitted to the receiving endpoint, such as depicted endpoint  104 . In the depicted embodiment, this is shown at  1000 B. On the receiving side the bit stream is processed bit by bit and decrypted as follows: 
         [0000]    0) The number of prepended random bytes, RB, is set equal to a random value returned from PRNG1 after which PRNG1 is called RB number of times. If RB was zero, then RB was set equal to the default value.
 
1) A random number is generated by AA-PRNG, AA.
 
2) A random number is generated by BB-PRNG, BB.
 
       3) Calculate Deviation=AA−BB. 
       [0076]    4) A running sum of the absolute value of the Deviation is maintained, DeviationSum.
 
5) A running sum of the number of bytes processed is maintained, ByteCnt.
 
6) If Deviation is greater than or equal to zero, then the next bit in the bit stream is inverted, otherwise it is not inverted.
 
7) If DeviationSum is greater than DevSumThreshold, then a new epoch is begun and the following processing is performed, otherwise step 8 is performed next.
       7a) DevSumThreshold is recomputed by setting it equal to a value divided by M. The value is derived by computing the CRC of a hash value. The seed to the CRC computation is the CRC of the previous epoch. The hash value is the value returned by HASH. The input to HASH is filled with random byte values generated from PRNG1. If DevSumThreshold is less than MinThreshold, then DevSumThreshold is set to MinThreshold. Suggested value for MinThreshold is MAX.   7b) The existing AA-PRNG is destroyed, and a new AA-PRNG is created with bit string seed equal to a value returned from HASH. The input to HASH is equal to a bit string completely filled with random values generated from PRNG1.   7c) The existing BB-PRNG is destroyed, and a new BB-PRNG is created with bit string seed equal to a value returned from HASH. The input to HASH is equal to a bit string completely filled with random values generated from PRNG2.   7d) DeviationSum is reset to zero.
 
8) The algorithm is repeated from step 1 until all bits have been processed.
 
9) The bit stream is unshifted as described below in the function, UNSHIFTBITS. The resulting bit stream is the decrypted bit stream. The decrypted bit stream is identical to the original unecrypted bit stream.
 
10) The first RB number of bytes are discarded from the bit stream, thus removing the prepended random bytes and leaving only the unencrypted actual data.
       
 
         [0081]    Function SHIFTBITS treats the bit stream as a set of shift registers, S[i]. The size of the ith shift register, SS[i], and the bit shift of the ith shift register, SB[i], are random values. Starting with index i=0, the process of forming the shift registers and performing the bit shifting is as follows:
       1) SS[i] is set equal to a return value of PRNG1. SB[i] is set equal to a return value of PRNG1. If SB[i] is greater than SS[i], then their values are interchanged, that is, SB[i]=SS[i] and SS[i]=SB[i].   (2) If BC+SS[i], where BC is a running total of the number of bits processed, is greater than the total number of bits, TB, in the bit stream, then SS[i] is adjusted by setting it equal to TB−BC. If SB[i] is now greater than or equal to SS[i], then SB[i] is scaled by the ratio of the adjusted SS[i] divided by the original SS[i].   (3) In the ith register, S[i], bit  0  is shifted forward SB[i] number of bits, bit  1  is shifted forward SB[i] number of bits, bit  2  is shifted forward SB[i] number of bits, and so forth until SS[i] number of bits are processed. For bits shifted past the end of S[i], they are wrapped around starting at the first bit of S[i].   (4) A running count of the number of bits processed is maintained, BC=BC+SS[i]. When BC&gt;=TB, then SHIFTBITS is exited.   (5) The index i is incremented by 1 and processing continues at step 1.       
 
         [0087]    Function UNSHIFTBITS is the antithesis of SHIFTBITS. Starting with the index i=0, the process of undoing the bit shifting performed by SHIFTBITS is as follows:
       1) SS[i] is set equal to a return value of PRNG1. SB[i] is set equal to a return value of PRNG1. If SB[i] is greater than SS[i], then their values are interchanged, that is, SB[i]=SS[i] and SS[i]=SB[i].   (2) If BC+SS[i], where BC is a running total of the number of bits processed, is greater than the total number of bits, TB, in the bit stream, then SS[i] is adjusted by setting it equal to TB−BC. If SB[i] is now greater than or equal to SS[i], then SB[i] is scaled by the ratio of the adjusted SS[i] divided by the original SS[i].   (3) In the ith register, S[i], bit  0  is shifted backward SB[i] number of bits, bit  1  is shifted backward SB[i] number of bits, bit  2  is shifted backward SB[i] number of bits, and so forth until SS[i] number of bits are processed. For bits shifted backward past the beginning of S[i], they are wrapped around starting at the last bit of S[i].   (4) A running count of the number of bits processed is maintained, BC=BC+SS[i]. When BC&gt;=TB, then UNSHIFTBITS is exited.   (5) The index i is incremented by 1 and processing continues at step 1.       
 
         [0093]      FIG. 2  provides a schematic diagram of an example networked or distributed computing environment. The distributed computing environment comprises computing objects  510 ,  512 , etc., and computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc., which may include programs, methods, data stores, programmable logic, etc. as represented by example applications  530 ,  532 ,  534 ,  536 ,  538 . It can be appreciated that computing objects  510 ,  512 , etc. and computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc. may comprise different devices, such as personal digital assistants (PDAs), audio/video devices, mobile phones, MP3 players, personal computers, laptops, etc. Each of these computing objects or devices may serve as an endpoint for the use methods disclosed herein. 
         [0094]    Each computing object  510 ,  512 , etc. and computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc. can communicate with one or more other computing objects  510 ,  512 , etc. and computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc. by way of the communications network  540 , either directly or indirectly. Even though illustrated as a single element in  FIG. 2 , communications network  540  may comprise other computing objects and computing devices that provide services to the system of  FIG. 2 , and/or may represent multiple interconnected networks, which are not shown. Each computing object  510 ,  512 , etc. or computing object or device  520 ,  522 ,  524 ,  526 ,  528 , etc. can also contain an application, such as applications  530 ,  532 ,  534 ,  536 ,  538 , that might make use of an API, or other object, software, firmware and/or hardware, suitable for communication with or implementation of the application provided in accordance with various embodiments of the subject disclosure. 
         [0095]    There are a variety of systems, components, and network configurations that support distributed computing environments. For example, computing systems can be connected together by wired or wireless systems, by local networks or widely distributed networks. Currently, many networks are coupled to the Internet, which provides an infrastructure for widely distributed computing and encompasses many different networks, though any network infrastructure can be used. For example, communications made incident to the systems as described in various embodiments. 
         [0096]    Thus, a host of network topologies and network infrastructures, such as client/server, peer-to-peer, or hybrid architectures, can be utilized. 
         [0097]    In a client/server architecture, particularly a networked system, a client is usually a computer that accesses shared network resources provided by another computer, e.g., a server. In the illustration of  FIG. 5 , as a non-limiting example, computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc. can be thought of as clients and computing objects  510 ,  512 , etc. can be thought of as servers where computing objects  510 ,  512 , etc., acting as servers providing data services, such as receiving data from client computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc., storing of data, processing of data, transmitting data to client computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc., although any computer can be considered a client, a server, or both, depending on the circumstances. 
         [0098]    A server is typically a remote computer system accessible over a remote or local network, such as the Internet or wireless network infrastructures. The client process may be active in a first computer system, and the server process may be active in a second computer system, communicating with one another over a communications medium, thus providing distributed functionality and allowing multiple clients to take advantage of the information-gathering capabilities of the server. 
         [0099]    In a network environment in which the communications network  540  or bus is the Internet, for example, the computing objects  510 ,  512 , etc. can be Web servers with which other computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc. communicate via any of a number of known protocols, such as the hypertext transfer protocol (HTTP). Computing objects  510 ,  512 , etc. acting as servers may also serve as clients, e.g., computing objects or devices  520 ,  522 ,  524 ,  526 ,  528 , etc., as may be characteristic of a distributed computing environment. 
         [0100]    As mentioned, advantageously, the techniques described herein can be applied to any device. It can be understood, therefore, that handheld, portable and other computing devices and computing objects of all kinds are contemplated for use in connection with the various embodiments. Accordingly, the below general purpose remote computer described below in  FIG. 3  is but one example of a computing device. 
         [0101]    Embodiments can partly be implemented via an operating system, for use by a developer of services for a device or object, and/or included within application software that operates to perform one or more functional aspects of the various embodiments described herein. Software may be described in the general context of computer executable instructions, such as program modules, being executed by one or more computers, such as client workstations, servers or other devices. Those skilled in the art will appreciate that computer systems have a variety of configurations and protocols that can be used to communicate data, and thus, no particular configuration or protocol is considered limiting. 
         [0102]      FIG. 3  thus illustrates an example of a suitable computing system environment  600  in which one or aspects of the embodiments described herein can be implemented, although as made clear above, the computing system environment  600  is only one example of a suitable computing environment and is not intended to suggest any limitation as to scope of use or functionality. In addition, the computing system environment  600  is not intended to be interpreted as having any dependency relating to any one or combination of components illustrated in the example computing system environment  600 . 
         [0103]    With reference to  FIG. 3 , an example remote device for implementing one or more embodiments includes a general purpose computing device in the form of a computer  610 . Components of computer  610  may include, but are not limited to, a processing unit  620 , a system memory  630 , and a system bus  622  that couples various system components including the system memory to the processing unit  620 . 
         [0104]    Computer  610  typically includes a variety of computer readable media and can be any available media that can be accessed by computer  610 . The system memory  630  may include computer storage media in the form of volatile and/or nonvolatile memory such as read only memory (ROM) and/or random access memory (RAM). By way of example, and not limitation, system memory  630  may also include an operating system, application programs, other program modules, and program data. 
         [0105]    A user can enter commands and information into the computer  610  through input devices  640 . A monitor or other type of display device is also connected to the system bus  622  via an interface, such as output interface  650 . In addition to a monitor, computers can also include other peripheral output devices such as speakers and a printer, which may be connected through output interface  650 . 
         [0106]    The computer  610  may operate in a networked or distributed environment using logical connections to one or more other remote computers, such as remote computer  670 . The remote computer  670  may be a personal computer, a server, a router, a network PC, a peer device or other common network node, or any other remote media consumption or transmission device, and may include any or all of the elements described above relative to the computer  610 . The logical connections depicted in  FIG. 6  include a network  672 , such local area network (LAN) or a wide area network (WAN), but may also include other networks/buses. Such networking environments are commonplace in homes, offices, enterprise-wide computer networks, intranets and the Internet. 
         [0107]    As mentioned above, while example embodiments have been described in connection with various computing devices and network architectures, the underlying concepts may be applied to any network system and any computing device or system in which it is desirable to improve efficiency of resource usage. 
         [0108]    Also, there are multiple ways to implement the same or similar functionality, e.g., an appropriate API, tool kit, driver code, operating system, control, standalone or downloadable software object, etc. which enables applications and services to take advantage of the techniques provided herein. Thus, embodiments herein are contemplated from the standpoint of an API (or other software object), as well as from a software or hardware object that implements one or more embodiments as described herein. Thus, various embodiments described herein can have aspects that are wholly in hardware, partly in hardware and partly in software, as well as in software. 
         [0109]    The word “exemplary” is used herein to mean serving as an example, instance, or illustration. For the avoidance of doubt, the subject matter disclosed herein is not limited by such examples. In addition, any aspect or design described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects or designs, nor is it meant to preclude equivalent exemplary structures and techniques known to those of ordinary skill in the art. Furthermore, to the extent that the terms “includes,” “has,” “contains,” and other similar words are used, for the avoidance of doubt, such terms are intended to be inclusive in a manner similar to the term “comprising” as an open transition word without precluding any additional or other elements when employed in a claim. 
         [0110]    As mentioned, the various techniques described herein may be implemented in connection with hardware or software or, where appropriate, with a combination of both. As used herein, the terms “component,” “module,” “system” and the like are likewise intended to refer to a computer-related entity, either hardware, a combination of hardware and software, software, or software in execution. For example, a component may be, but is not limited to being, a process running on a processor, a processor, an object, an executable, a thread of execution, a program, and/or a computer. By way of illustration, both an application running on computer and the computer can be a component. One or more components may reside within a process and/or thread of execution and a component may be localized on one computer and/or distributed between two or more computers. 
         [0111]    The aforementioned systems have been described with respect to interaction between several components. It can be appreciated that such systems and components can include those components or specified sub-components, some of the specified components or sub-components, and/or additional components, and according to various permutations and combinations of the foregoing. Sub-components can also be implemented as components communicatively coupled to other components rather than included within parent components (hierarchical). Additionally, it can be noted that one or more components may be combined into a single component providing aggregate functionality or divided into several separate sub-components, and that any one or more middle layers, such as a management layer, may be provided to communicatively couple to such sub-components in order to provide integrated functionality. Any components described herein may also interact with one or more other components not specifically described herein but generally known by those of skill in the art. 
         [0112]    While this disclosure has been described using certain embodiments, it can be further modified while keeping within its spirit and scope. This application is therefore intended to cover any variations, uses, or adaptations of the disclosure using its general principles. Further, this application is intended to cover such departures from the present disclosure as come within known or customary practices in the art to which it pertains and which fall within the limits of the appended claims.