Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD, APPARATUS, AND COMPUTER-READABLE MEDIUM FOR SECURED DATA TRANSFER OVER A DECENTRLAIZED COMPUTER NETWORK
Document Type and Number:
WIPO Patent Application WO/2021/242709
Kind Code:
A1
Abstract:
A method and apparatus for secured, peer-to-peer transfer of data rights over a computer network, the method being accomplished by a distributed computing system including a distributed ledger platform and an off-chain data host platform. On-chain authorization tokens are used to track data access rights, enforce access policies, and control distribution of encryption keys.

Inventors:
DONEY GEORGE (US)
YERMAKOV IHOR (AE)
Application Number:
PCT/US2021/033954
Publication Date:
December 02, 2021
Filing Date:
May 25, 2021
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
SECURRENCY INC (US)
International Classes:
H04L9/12; G06Q20/36; H04L9/14
Domestic Patent References:
WO2020028197A12020-02-06
Foreign References:
US20190294822A12019-09-26
US20200090143A12020-03-19
Attorney, Agent or Firm:
KAUFMAN, Marc (US)
Download PDF:
Claims:
CLAIMS

What is claimed is:

1. A method for secured, data transfer over a distributed computer system, the distributed computing system including a distributed ledger platform and a data host platform, the method comprising: transferring, from a sending party to a receiving party, access rights to data Di, the transferring including:

(b) the sending party generating an encryption key, Ki, and encrypting Di with Ki using a symmetric encryption algorithm to create encrypted data Di*;

(c) the sending party transmitting Di* to the data host platform, wherein the data host platform cannot access Di;

(d) the sending party receiving a pointer to Di* , the pointer including an Di*ID that corresponds to Di*;

(e) the sending party encrypting Ki with a public key of the receiving party using an asymmetric encryption algorithm to create an encrypted key Ki*;

(f) the sending party signing an Issue transaction via a WalletRegistry smart contract on a distributed ledger platform to thereby cause the WalletRegistry smart contract to create an AuthToken, the AuthToken being a transferable non-fungible token on a distributed ledger that includes a data structure containing Di*ID, and Ki*; and

(g) transferring the AuthToken to a cryptographic wallet associated with the receiving party; and accessing Di by the receiving party, the accessing including:

(h) the receiving party signing an Access transaction via the WalletRegistry smart contract on the distributed ledger platform resulting in the creation of a session ID, Si; (i) the receiving party sending an access request for Di* to the data host platform including Si and Di*ID;

(j) the data host platform validating the request platform by calling the WalletRegistry smart contract on the distributed ledger platform to thereby cause the WalletRegistray smart contract to consult at least one data authorization policy for validation of a qualifying transaction;

(k) in response to the validation, the data host, encrypting Di* with the public key of the recipient using asymmetric encryption, resulting in Di **, and sending D1**to the receiving party; and

(L) the receiving party decrypting Di** using the receiving party’s private key using asymmetric encryption resulting in Di *, decrypting the encryption key Ki* with the receiving party’s private key using asymmetric encryption resulting in Ki, and decrypting the escrowed data Di* with the encryption key Ki using symmetric encryption resulting in Di to thereby gain access to the data Di;

2. The method of claim 1 , wherein the data structure of the AuthToken specifies the at least one access policy.

3. The method of claim 2, wherein consulting with policy and validation of a qualifying transaction is accomplished during the creation of a session corresponding to the session ID.

3. The method of claim 1 , wherein steps (a) and (b) are conducted multiple times to provide rights to respective additional recipients.

4. The method of claim 1 , wherein steps (a) and (b) are conducted at least once by a Recipient in order to delegate respective rights to at least one other party as at lease one additional recipient.

5. The method of claim 1 , wherein the process for generating or validating a session ID Si in the Data Registry smart contract includes: retrieving, interpreting, and enforcing an access policy associated with the AuthToken to determine whether to initiate the access session, wherein the policy includes rules specifying the qualifying attributes of a transaction, sending party, and receiving party.

6. The method of claim 5, wherein the rules also specify transaction context data.

7. The method of claim 1 , wherein the data Owner, Source, or Administrator can revoke access by recalling the AuthToken from the Recipient’s wallet.

8. The method of claim 1 , wherein the data Owner, Source, or Administrator can revoke review access records by calling the AuthToken smart contract to review activated sessions.

10. The method of claim 1, wherein the data structure the AuthToken also specifies: AuthTokenID as a unique token identifier;

PolicylD as an identifier of a policy to be applied to transactions on the AuthToken;

SourcelD indicating the owner of Di; and

DataVerificationEntity ID indicating the entity for verification of data.

Description:
METHOD, APPARATUS, AND COMPUTER-READABLE MEDIUM FOR SECURED DATA TRANSFER OVER A DECENTRLAIZED COMPUTER NETWORK

RELATED APPLICATION DATA

[0001] This application claims priority to US Provisional Application No. 63/030,387 filed on May 27, 2020, the entire disclosure of which is incorporated herein by reference.

FIELD OF THE INVENTION

The invention relates to cryptographic methods to securely share data rights via decentralized networks.

COPYRIGHT NOTICE

[0002] A portion of the disclosure of this patent document contains material which is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the patent document or the patent disclosure, as it appears in the Patent and Trademark Office patent file or records, but otherwise reserves all copyright rights whatsoever.

BACKGROUND

[0003] Conventional Self-Sovereign Data Storage (SSDS) includes techniques to ensure that the issuer maintains control over distribution of data and the DataHost never has access to the data in an unencrypted form. A variation on the implementation may include an administrator role with control over data distribution but no access to the underlying data. SSDS has been applied in personal identification applications, medical records applications and more general content distribution applications. However, conventional SSDS require centralized trusted parties and do not permit peer to peer distribution, transfer, and delegation of rights. As a result, data owners have no mechanism for controlling and managing data dissemination without relying on centralized systems for permission management. [0004] Recently, the concept of “Self-Sovereign Identity’ (SSI), a user-centric identity has become known. SSI is intended to enable a person to be in full control of the their own identity and related data in a decentralized identity ecosystem. Identity-related data can be stored in a digital wallet. Participant nodes of the decentralized network can issue, receive, and validate credentials that contain individual claims. This is accomplished by Distributed Ledger Technology (DLT), utilizing strong cryptography for building a global blockchain-like consensus network that provides trust for all participants. However, such systems and methods do not: support generalized forms of data; provide a flexible model for the transfer, distribution control, and revocation of data rights; or include policy enforcement for access rules that may be dependent on time or other environmental factors.

SUMMARY

[0005] The disclosed implementations provide a technical mechanism for secure, trustless data transfer and data rights exchange through the minting and use of a data authorization tokens in a decentralized framework that ensures authorized participating parties can access sensitive data when necessary, and only when necessary. The disclosed implementations are designed such that data owners can disseminate data to counterparties, that might not have a relationship with, and might not trust, each other, such that counterparties can only access data when authorized and with full accountability. The disclosed implementations can include an “on-chain” token registry and an “off-chain” data host, as well as other distributed components, as described in detail below.

[0006] One aspect of the disclosed implementations is a method for secured, multi lateral, assured data transfer over a computer network for the exchange of data Di related to qualifying transactions, the method being accomplished by a distributed computing system including a distributed ledger platform and a data host platform, the method comprising: transferring, from a sending party to a receiving party, access rights to Di, the transferring including: the sending party generating an encryption key, Ki, encrypting Di with Ki using a symmetric encryption algorithm to create encrypted data Di*; the sending party transmitting Di* to the data host platform, wherein the data host platform cannot access Di; the sending party receiving a pointer to Di* , an uniform resource identifier Di*ID that corresponds to Di*; the sending party encrypting Ki with a public key of the receiving party using an asymmetric encryption algorithm to create an encrypted key Ki*; the sending party signing an Issue transaction via a WalletRegistry smart contract on a distributed ledger platform to create an AuthToken, that is a transferable non-fungible token on a distributed ledger that expresses a data structure containing Di*ID, Ki* and other data such as access policy; and transferring the AuthToken to a cryptographic wallet associated with the receiving party; and accessing Di by the receiving party, the accessing including: the receiving party signing an access transaction via the WalletRegistry smart contract on the distributed ledger platform resulting in the creation of a session ID, Si; the receiving party sending an access request for Di* to the data host platform including Si and Di*ID; the data host platform validating the request platform by calling the WalletRegistry smart contract on the distributed ledger platform which consults data authorization policy for validation; in response to the validating, the data host, encrypting Di* with the public key of the recipient using asymmetric encryption, resulting in Di**, and sending D1**to the receiving party; and the receiving party decrypting Di** using the receiving party’s private key using asymmetric encryption resulting in Di *, decrypting the encryption key Ki* with the receiving party’s private key using asymmetric encryption resulting in Ki, and decrypting the escrowed data Di*with the encryption key Ki using symmetric encryption resulting in Di to thereby gain access to the data Di.

[0007] Another aspect is the process for generating or validating a session ID Si in the Wallet Registry smart contract that includes retrieving, interpreting, and enforcing an access policy, if assigned the to AuthToken, to determine whether to initiate the access session, where the policy may include rules regarding the qualifying attributes of a transaction, sending party, receiving party, or other context. Policy access, interpretation, and enforcement can be an implementation of the policy engine described in U.S. Patent Application Ser. No. 16/143,058, the disclosure of which is incorporated herein by reference.

BRIEF DESCRIPTION OF THE DRAWINGS

[0008] FIG. 1 is a block diagram of an encryption architecture in accordance with disclosed implementations.

[0009] FIG. 2 is a schematic diagram of a DDRM architecture in accordance with disclosed implementations.

[0010] FIG. 3 is a schematic illustration of a data registration workflow in accordance with disclosed implementations.

[0011] FIG. 4 is a schematic illustration of a data access workflow in accordance with disclosed implementations.

[0012] FIG. 5 is a schematic illustration of an additional authorization workflow in accordance with disclosed implementations.

[0013] FIG. 6 is a schematic illustration of a rights delegation workflow in accordance with disclosed implementations.

[0014] FIG. 7 is a schematic illustration of a rights revocation workflow in accordance with disclosed implementations.

[0015] FIG. 8 is a schematic illustration of a rights monitoring workflow in accordance with disclosed implementations.

[0016] FIG. 9 is a schematic illustration of a policy enforcement workflow in accordance with disclosed implementations.

DETAILED DESCRIPTION

[0017] By developing a secure, decentralized method to transfer data access rights via decentralized systems, such as blockchain based systems, the disclosed implementations implement Decentralized Data Rights Management (DDRM) which extends SSDS to enable peer to peer distribution, transfer, and delegation of rights. As a result, the disclosed implementations provide data owners with a mechanism to control and manage data dissemination without a dependency on centralized systems for permission management. [0018] Disclosed implementations of DDRM can employ digital tokens, such as blockchain based ERC-721 compliant tokens, as AuthTokens to enable authorization transfer via standardized cryptographic wallets which represent addresses on a decentralized computing network. IN addition to access rights, AuthTokens may represent a broader range of data rights (e.g., update and/or delete rights). AuthToken actions and transfers may be governed by Decentralized Policy Enforcement techniques such as those described in U.S. Patent Application Ser. No. 16/143,058.

[0019] Convenient and Practical use of decentralized Self-Sovereign data management systems requires an innovative architecture to solve 3 technical problems:

• Self-sovereignty: A practical model for the Issuer (data owner) to manage, set policy, and audit data rights. [Technical challenge: Secure key transfer]

• Policy based peer to peer sharing: A secure, intuitive model for peer to peer sharing of rights [Technical challenge: Leverage blockchain for decentralization without key storage on chain]

• Scalable, secure hosting: Scalable hosting of data without providing the Data Host access to the underlying data [Technical challenge: Leverage established cloud hosting patterns without providing the host access to data]

[0020] The technical solution to these problems includes: a) an implementation with at least two layers of encryption designed to ensure that only authorized recipients may access the data in an unencrypted form; b) the use of tokens (e.g., ERC-721 tokens) for rights transfer and audit; and c) a novel hybrid blockchain/cloud storage architecture. By developing a secure, decentralized method to transfer access rights and other rights via blockchain based systems, the disclosed implementations extend traditional Data Rights Management models and conventional self-sovereign data models to enable peer to peer distribution, transfer, and delegation of rights. As a result, the disclosed implementations provide data owners a mechanism for controlling and managing data dissemination without a dependency on centralized systems for permission management. [0021] The disclosed implementations use multiple layers of encryption to protect data from unauthorized access. The first layer protects the document from access from the DataHost (self sovereign) or any other unauthorized party. The second layer enables access transfer to authorized Recipients within a Session established on the decentralized network, i.e. , “onchain”.

[0022] As illustrated in FIG. 1 , Encryption layer 1 , which can be based on a known symmetric encryption algorithm on the client side, enables scalable remote storage and access to data while ensuring the DataHost never has access to the data in unencrypted form. Secure decentralized transfer of key “K” to a designated Recipient over the decentralized network is achieved through a novel combination of components and a novel data model of the system. The technique uses an AccessToken containing an AccessKey to facilitate rights transfer on, for example, public blockchains without compromising the decryption key. Encryption layer 2 is used by the DataHost for, in response to a valid access request, encrypting the inner envelope using a public key of the requesting wallet using asymmetric encryption techniques. This prevents a “man in the middle” attack by ensuring only the designated wallet can decrypt the key “K”.

[0023] FIG. 2 illustrates a hybrid distributed networked computing system 200 in accordance with a disclosed implementation. System 200 addresses the above- noted technical issues through a distributed computing system including client interface computing platform 210 (also referred to herein as “client 210”), off-chain data host 230, and on-chain distributed ledger platform 220 for registration of wallets and secure, assured transfer of rights to client data when a qualifying transaction occurs. Distributed ledger platform 220 is a decentralized infrastructure such as an Ethereum blockchain or other distributed ledger technology. Data host 230 can be implemented as off-chain data storage for storing encrypted Pll data or other sensitive data which cannot be decrypted by the data host 230. The encrypted data may be hosted using on-premises storage, cloud storage, decentralized storage systems such as IPFS (IPFS decentralized data storage), or other storage techniques. [0024] Distributed ledger platform 220 includes authorization token registry 222 (“AuthToken Registry”) and Data Registration Smart Contract(s) 224 (“DataRegistry”). Disclosed implementations can use an extended ERC-721 token for the on-chain representation of the authorization tokens (“AuthToken”). As noted above, data host 230 can be used for storage of encrypted data. For example, IPFS can be used for cloud storage of encrypted documents. IPFS (Interplanetary File System) is a decentralized storage solution for blockchain-based content. When using IPFS, files are divided into parts and stored across a network of nodes, that track the file by hashes. The parts can be assembled together, based on their hash value, to recreate the original file. In the examples herein, clusters of data are referred to as “files”. Flowever, the “files” can be one or more packets or clusters and need not be stored as a single file in the conventional sense of the word.

[0025] The data host has no access to the unencrypted data. Policy engine 226 of distributed ledger platform 220 ensures regulatory compliance for any transactions and includes a policy enforcement point (PEP), a policy registry, and attestation registry and an attributes registry. As noted above, policy engine 226 can be an implementation of the policy engine described in U.S. Patent Application Ser. No. 16/143,058.

[0026] Client 210 and data host 230 can be implemented using a range of hardware, software programming and architecture techniques. Disclosed implementations can use C++, Java, node.js, Flutter, React, or any other modern programming language for the client interface and data host. The Client interface can use symmetric and asymmetric encryption, while the data host can use asymmetric encryption, as described in greater detail below.

[0027] Decentralized Digital Rights Management can be thought of in terms of 7 main processes:

• Data Registration: Owner creates and delivers an ERC-721 token providing access to protected content

• Data Access: Authorized Recipient accesses protected content

• Additional Authorization: Owner provides additional access to protected content • Rights Delegation: Recipient delegates rights (with ability to revoke) to another user while retaining rights

• Rights Revocation: Owner or Administrator (if implemented) removes rights from a Recipient

• Rights Monitoring: Owner or Administrator (if implemented) reviews all rights, transfers, and authorizations

• Policy Enforcement: Use of a policy engine to enforce complex authorization or transfer policy

[0028] The AuthToken Interface Specification can be implemented as code stored on the distributed ledger. An example of such code, in the Solidity smart contract language, is set forth below. pragma solidity >=0.5.0 <0.6.0; pragma experimental ABIEncoderV2;

I**

@title Interface of the Authorization Token */ interface lAuthToken {

I**

@dev Creates access token @param datald Data or document identifier @param accessKey Encrypted key @param to A token recipient */ function createAuthToken(uint datald, string calldata accessKey, address to) external; I**

@dev Prepares information about account @param account Account address */ function getFilesForAccount(address account) external view returns ( uint[50] memory accessTokenslds, uint[50] memory datalds, bool[50] memory isOwner

);

I**

@dev Creates auth session, returns accessKey and sessionld @param authTokenld Access token identifier */ function createSession(uint authTokenld) external returns (string memory);

I**

@dev Returns list of the users that have access to the data @param authTokenld Auth token identifier */ function getPermissionsByld(uint authTokenld) external view returns (address[] memory); I**

@dev Save permissions for the data specified in the token @param authTokenld AuthToken identifier @param accessKeys List of the access keys for the data @param recipients List of the recipients of the permissions */ function savePermissions(uint authTokenld, string[] calldata accessKeys, address[] calldata recipients) external;

I**

@dev Get access key by auth token id @param authTokenld Access token identifier */ function getAccessKeyByld(uint authTokenld) external view returns (string memory);

I**

@dev Reads session details @param sessionld Session identifier */ function getSessionDetails(uint sessionld) external view returns (address recipient uint datald, uint ttl);

}

[0029] FIG. 3 illustrates a Data Registration process that can be accomplished by the computing system shown in FIG. 2. As shown in FIG. 3, A data Owner can register post data for distribution. To share data, the owner creates an access key, K, for encryption using known key generation techniques, at step 1. The Owner retains K.

At step 2, the Owner then encrypts, using a symmetric encryption algorithm, the Pll data using key K. At step 3, the Owner then sends the encrypted data, using client 210, to data host 230 and data host 230 generates an internal ID “DatalD” that can be used to identify and retrieve the encrypted data in the system.

[0030] At step 4, the Owner encrypts key K, using an asymmetric encryption algorithm, with the public key of the Recipient’s wallet resulting in an access key “AccessKey” for the Recipient. As a result, only the desired Recipient holds the private key for the public address, the means to decrypt the contents, a required step to access the underlying shared data. Note, the sender is not required to have the Recipient’s private key in order to encrypt the contents. At step 5, the Owner signs a register request, createAuthToken, to the blockchain authorization token registry 222 to issue one or more AuthToken(s) for each desired Recipient, by means of a smart contract of the distributed ledger platform 220. At step 6, the issued AuthToken is sent to a wallet corresponding to the Recipient(s) using ERC-721 (or equivalent) transfer functions. The AuthToken can be a non-fungible token (NFT) expressed as a data structure that contains (at least):

• AuthTokenID (a unique token identifier)

• AccessKey (generated in step 4 above)

• DatalD (generated in step 3 above)

• PolicylD (optional - for identifying a policy to be applied/enforced by policy engine 226)

• Source (Owner of data)

• Data Verification Entity (Optional)

[0031] FIG. 4 illustrates a Data Access process by which the Recipient gains access to encrypted data based on the rights granted above. Of course, in a multilateral exchange of data each party may implement the process of FIG. 5 (below) to provide data access to the other party or multiple parties. At step 1 , the Recipient signs an access request message, createSession, including AuthTokenID to distributed ledger platform 220 to open an authorization session for the requested data. At step 2, a smart contract on distributed ledger platform 220 checks whether the Recipient is an AuthToken holder for the requested data, i.e. has been granted access rights consistent with the authorization request, consulting with the policy engine, which can be an implementation of the policy engine described in U.S. Patent Application Ser. No. 16/143,058, and has supported a qualifying transaction for the client wallet. If yes, a SessionID is generated. The SessionID is stored on-chain in session registry 228 (see FIG. 2). The SessionID can contain AuthTokenID for the corresponding AuthToken, time to live (TTL) or other expiration data, and data rights (access, update, delete, etc). At step 3, the Recipient sends a request message containing the SessionID to data Host 230.

[0032] At step 4, data Host 230 sends a request message, getSessionDetails, containing the SessionID to on-chain platform 220 to obtain DatalD and TTL data and the public key PK of an account associated with the authorization request. During this step, the Wallet Registry smart contract may consult the policy engine to determine if a qualifying event has occurred or other conditions have been met prior to sending a response containing the encrypted data. At step 5, data Host 230 retrieves the corresponding encrypted files using the DatalD and encrypts the files again using asymmetric encryption and the public key PK of the wallet requesting access (this effects encryption layer 2 noted above). Subsequently, the Recipient decrypts the data using its wallet’s private key resulting in data packet with encryption layer 1 noted above (i.e., data encrypted with key K). Then, the Recipient decrypts AuthTokenID using its private key yielding encryption key K and, the Recipient decrypts data using key K to thereby gain access to the data.

[0033] FIG. 5 illustrates the steps for an Owner, as an originating party to provide data access rights to a Recipient, in accordance with a disclosed implementation. Of course, in a multilateral exchange of data each party may implement the process of FIG. 4 to provide data access to the other party or multiple parties. At step 1 , an owner, asymmetrically encrypts key K using the public key of one or more wallets of a Recipient to thereby create an AccessKey for each wallet that will receive authorization. At step 2, the Owner signs an authorize request, createAuthToken, to distributed ledger platform 220 resulting in the smart contract issuing one or more AuthToken(s) for the Recipient(s) who will have access to the data when a qualifying transaction occurs. The AuthToken data structure is described above. Note that the Source of the AuthToken data structure indicates the wallet of the original owner (issuer). At step 3, AuthTokens are sent to wallets of Recipient(s), using an ERC-721 (or equivalent) transfer function.

[0034] FIG. 6 illustrates a Rights Delegation process. At Step 1, the Recipient decrypts AccessKey, as described above in the Data Access flow, to obtain "K" which was used for data encryption. At Step 2, the Recipient uses public key ("PK") of the Delegate to encrypt key "K" to obtain a new AccessKey. At Step 3, the Recipient signs an authorize request, createAuthToken, to the distributed ledger platform 220 AuthDataRegistry SmartContract. The SmartContract determines if Transfer is eligible based on Policy, and if authorized conducts Step 4 in which a new AuthToken is created with the Recipient as Source. At Step 5, the Recipient transfers the new AuthToken to the Delegate using an ERC-721 (or equivalent) transfer function. Note that the Issuer and the Sender may revoke Delegate’s Authorization.

[0035] FIG. 7 illustrates a Rights Revocation process. At Step 1 , the data Owner (or Source, or Administrator) signs a Revoke transaction to the AuthDataRegistry SmartContract. At step 2, the SmartContract determines eligibility of the initiator of the transaction. If eligible, the AuthToken and any active Sessions are removed. At step 3, The AuthToken is no longer accessible via the Recipient’s wallet. Note that the presence of an Administrator clawback is a preference that can be enabled/disabled at the SmartContract scope (e.g., for all tokens) or a per token scope by the Owner. AuthTokens may be set to expire at a certain time by the Owner. The AuthToken is not removed from the Recipient, but will no longer enable access. The Recipient can submit a Reauthorize request. If approved, Recipient’s authorization will be restored.

[0036] FIG. 8 illustrates a Rights Monitoring process. At Step 1, Owner (or Source, or Administrator) requests all granted authorizations from AuthTokenRegistry smart contract, getPermissionsByld. At step 2, the smart contract returns results. [0037] FIG. 9 illustrates a Policy Enforcement process. At Step 1 , the Requestor signs atransaction (such as an Authorize, Access, Delegate, Revoke, or Transfer transaction) to AuthDataRegistry Smart Contract. At step 2, AuthDataRegistry Smart Contract consults the Policy Engine (described above with reference to U.S. Patent Application Ser. No. 16/143,058) to verify the legitimacy of the request and responds with an error code & message if denied.

[0038] The workflows described above leverage the use of a data access token in the process of a secure, conditional exchange of information where multiple parties can be assured that the data is both properly used and is available on meeting the conditions. The Owner can have certainty in advance that access conditions must be met according to configured policies for the Recipient to gain access. The novel combination of data structures, on-chain and off-chain registries, key management and secure message flows allow the parties to be assured of secure data exchange. The disclosed implementations include one or more of the rights transfer and data access processes described above.

[0039] The disclosed implementations can be implemented by various computing devices programmed with software and/or firmware to provide the disclosed functions and modules of executable code implemented by hardware. The software and/or firmware can be stored as executable code on one or more non-transient computer- readable media. The computing devices may be operatively linked via one or more electronic communication links. For example, such electronic communication links may be established, at least in part, via a network such as the Internet and/or other networks.

[0040] A given computing device may include one or more processors configured to execute computer program modules. The computer program modules may be configured to enable an expert or user associated with the given computing platform to interface with the system and/or external resources. By way of non-limiting example, the given computing platform may include one or more of a server, a desktop computer, a laptop computer, a handheld computer, a tablet computing platform, a Smartphone, a gaming console, and/or other computing platforms. [0041] The various data and code can be stored in electronic storage devices which may comprise non-transitory storage media that electronically stores information. The electronic storage media of the electronic storage may include one or both of system storage that is provided integrally (i.e. , substantially non-removable) with the computing devices and/or removable storage that is removably connectable to the computing devices via, for example, a port (e.g., a USB port, a firewire port, etc.) or a drive (e.g., a disk drive, etc.). The electronic storage may include one or more of optically readable storage media (e.g., optical disks, etc.), magnetically readable storage media (e.g., magnetic tape, magnetic hard drive, floppy drive, etc.), electrical charge-based storage media (e.g., EEPROM, RAM, etc.), solid-state storage media (e.g., flash drive, etc.), and/or other electronically readable storage media.

[0042] Processor(s) of the computing devices may be configured to provide information processing capabilities and may include one or more of a digital processor, an analog processor, a digital circuit designed to process information, an analog circuit designed to process information, a state machine, and/or other mechanisms for electronically processing information. As used herein, the term “module” may refer to any component or set of components that perform the functionality attributed to the module. This may include one or more physical processors during execution of processor readable instructions, the processor readable instructions, circuitry, hardware, storage media, or any other components. [0043] Although the present technology has been described in detail for the purpose of illustration based on what is currently considered to be the most practical and preferred implementations, it is to be understood that such detail is solely for that purpose and that the technology is not limited to the disclosed implementations, but, on the contrary, is intended to cover modifications and equivalent arrangements that are within the spirit and scope of the appended claims. For example, it is to be understood that the present technology contemplates that, to the extent possible, one or more features of any implementation can be combined with one or more features of any other implementation. [0044] While implementations and examples have been illustrated and described, it is to be understood that the invention is not limited to the precise construction and components disclosed herein. Various modifications, changes and variations may be made in the arrangement, operation and details of the method and apparatus disclosed herein without departing from the spirit and scope of the invention defined in the appended claims.