Keychain syncing
Claim Score by NHIP
Abstract
Some embodiments provide non-transitory machine-readable medium that stores a program which when executed by at least one processing unit of a device synchronizes a set of keychains stored on the device with a set of other devices. The device and the set of other devices are communicatively coupled to one another through a peer-to-peer (P2P) network. The program receives a modification to a keychain in the set of keychains stored on the device. The program generates an update request for each device in the set of other devices in order to synchronize the set of keychains stored on device with the set of other devices. The program transmits through the P2P network the set of update requests to the set of other devices over a set of separate, secure communication channels.

Term
6.5 yearsto projected expiry
Projected expiry 15 March 2033, counted from filing; an application has no term until it is granted.
- Priority
- Filed
- Published
- Today
- Projected expiry
19 claims: 3 independent, 16 dependent
- 21A non-transitory machine-readable medium storing a program which when executed by at least one processing unit of a first peer device synchronizes a set of keychains stored on the first peer device with a set of other peer devices, the first peer device and the set of other peer devices communicatively coupled to one another through a network, the program comprising sets of instructions for:receiving a modification to a keychain in the set of keychains stored on the first peer device;generating an update request for each peer device in the set of peer devices in order to synchronize the set of keychains stored on the first peer device with the set of other peer devices;and transmitting through the network the set of update requests to the set of other peer devices over a set of separate, secure communication channels.
- 30Broadest claimClaim Score 56, average(NHIP)A method for synchronizing a set of keychains stored on a first peer device with a set of other peer devices, the first peer device and the set of other peer devices communicatively coupled to one another through a network, the method comprising:receiving a modification to a keychain in the set of keychains stored on the first peer device;generating an update request for each peer device in the set of other peer devices in order to synchronize the set of keychains stored on the first peer device with the set of other peer devices;and transmitting through the network the set of update requests to the set of other peer devices over a set of separate, secure communication channels.
Independent claims2
271 paragraphs in 4 sections, as filed
BACKGROUND
0001Sharing data among multiple devices is an increasingly popular feature for users of multiple devices. The data-sharing feature is implemented by updating entire files and, in some cases, entire sets of files specified for syncing among the multiple devices. Many applications that provide a data-sharing feature send and receive the data among the multiple devices in an unprotected manner.
BRIEF SUMMARY
0002Some embodiments of the invention provide a novel method for facilitating the synchronization (also referred to as “syncing”) of keychains between several devices that are specified as members of a synchronization group (also referred to as a sync group or sync circle). A keychain, in some embodiments, is a defined collection of data that may include passwords, private keys, certificates, secure notes, etc. In some embodiments, the method syncs the keychains between the devices through a peer-to-peer (P2P) network. The method of some embodiments employs a communication security feature for preventing unauthorized access of communications between the devices.
0003Different embodiments use different techniques to implement the P2P network through which the devices communicate with each other. For instance, some embodiments employ an overlay network with a fully connected mesh topology while other embodiments use an overlay network with a star topology. Still, some embodiments utilize any number of additional and/or different overly networks to implement the P2P network.
0004In some embodiments, the method provides a secure transport layer for protecting the data that the devices communicate with each other. The method of some embodiments implements the secure transport layer by providing a secure communication channel between each of the devices using a message-based communication protocol (e.g., off-the-record (OTR) messaging) while the method of other embodiments implements the secure transport layer by providing a secure communication channel between each pair of devices using a stream-based communication protocol (e.g., secure sockets layer (SSL)).
0005The method of some embodiment synchronizes a keychain between devices by synchronizing the individual items (also referred to as keychain items) of the keychain (as opposed to syncing the entire keychain). In some instances when syncing keychain items, the method of some embodiments detects conflicts between multiple versions of the same keychain item. The method of different embodiments resolves such conflicts in different ways. For example, in some embodiments, the method uses the most recent version of the keychain item as the keychain item to be synced between the devices. Additional and/or different approaches may be used in some embodiments.
0006In some embodiments, the method provides a data protection feature for limiting access to keychain data (e.g., keychain items) on a device according to defined set of conditions and/or requirements. For example, each keychain item on a device is specified, in some embodiments, as belonging to a particular protection domain. The method of some embodiments allows a device to access a particular keychain item only when a set of conditions and/or requirements defined for the particular protection domain to which the particular keychain item belongs is met. Examples of conditions and/or requirements include the device being in an unlocked state, the device being in a locked state, a user of the device entering a particular password, etc. Under this approach, access to the keychain items on a device may be controlled in a granular fashion.
0007The preceding Summary is intended to serve as a brief introduction to some embodiments of the invention. It is not meant to be an introduction or overview of all inventive subject matter disclosed in this document. The Detailed Description that follows and the Drawings that are referred to in the Detailed Description will further describe the embodiments described in the Summary as well as other embodiments. Accordingly, to understand all the embodiments described by this document, a full review of the Summary, Detailed Description and the Drawings is needed. Moreover, the claimed subject matters are not to be limited by the illustrative details in the Summary, Detailed Description and the Drawing, but rather are to be defined by the appended claims, because the claimed subject matters can be embodied in other specific forms without departing from the spirit of the subject matters.
BRIEF DESCRIPTION OF THE DRAWINGS
0008The novel features of the invention are set forth in the appended claims. However, for purposes of explanation, several embodiments of the invention are set forth in the following figures.
0009<figref idref="DRAWINGS">FIG. 1</figref> conceptually illustrates synchronizing passwords between several devices according to some embodiments of the invention.
0010<figref idref="DRAWINGS">FIG. 2</figref> conceptually illustrates a network architecture for a direct P2P network according to some embodiments of the invention.
0011<figref idref="DRAWINGS">FIG. 3</figref> conceptually illustrates a network architecture for an indirect P2P network according to some embodiments of the invention.
0012<figref idref="DRAWINGS">FIG. 4</figref> conceptually illustrates an example of starting a sync circle and adding devices to the sync circle according to some embodiments of the invention.
0013<figref idref="DRAWINGS">FIG. 5</figref> conceptually illustrates a process of some embodiments for requesting to join a sync circle.
0014<figref idref="DRAWINGS">FIG. 6</figref> conceptually illustrates a process of some embodiments for processing a request to join a sync circle.
0015<figref idref="DRAWINGS">FIG. 7</figref> conceptually illustrates an example data flow through the network architecture illustrated in <figref idref="DRAWINGS">FIG. 2</figref> for syncing passwords.
0016<figref idref="DRAWINGS">FIGS. 8 and 9</figref> conceptually illustrate an example data flow through the network architecture illustrated in <figref idref="DRAWINGS">FIG. 3</figref> for syncing passwords.
0017<figref idref="DRAWINGS">FIG. 10</figref> conceptually illustrates a data structure for a keychain according to some embodiments of the invention.
0018<figref idref="DRAWINGS">FIG. 11</figref> conceptually illustrates a state diagram that describes different states and transitions between these states of the keychain manager of some embodiments.
0019<figref idref="DRAWINGS">FIG. 12</figref> conceptually illustrates a process of some embodiments for pushing updates to peer devices.
0020<figref idref="DRAWINGS">FIG. 13</figref> conceptually illustrates a process of some embodiments for processing updates from peer devices.
0021<figref idref="DRAWINGS">FIG. 14</figref> conceptually illustrates a process of some embodiments for resolving conflicting conflict resolutions.
0022<figref idref="DRAWINGS">FIG. 15</figref> conceptually illustrates a process of some embodiments for resolving keychain item conflicts.
0023<figref idref="DRAWINGS">FIG. 16</figref> conceptually illustrates different keychain items in different devices.
0024<figref idref="DRAWINGS">FIG. 17</figref> conceptually illustrates a process that some embodiments perform to process keychain items.
0025<figref idref="DRAWINGS">FIG. 18</figref> conceptually illustrates a processing queue for depositing incoming keychain items.
0026<figref idref="DRAWINGS">FIG. 19</figref> conceptually illustrates a process that some embodiments perform to process keychain items received from a source device.
0027<figref idref="DRAWINGS">FIG. 20</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked in order for the keychain items belonging to the protection domain to be available at the device.
0028<figref idref="DRAWINGS">FIG. 21</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked at least once after being booted in order for the keychain items belonging to the protection domain to be available at the device.
0029<figref idref="DRAWINGS">FIG. 22</figref> illustrates keychain items secured by a protection domain that requires a device to be turned on in order for the keychain items belonging to the protection domain to be available at the device.
0030<figref idref="DRAWINGS">FIG. 23</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked and also requires additional authentication in order for the keychain items belonging to the protection domain to be available at the device.
0031<figref idref="DRAWINGS">FIG. 24</figref> illustrates data secured by two protection domains having different sets of conditions for a device.
0032<figref idref="DRAWINGS">FIG. 25</figref> conceptually illustrates several sync circles formed by several devices.
0033<figref idref="DRAWINGS">FIG. 26</figref> conceptually illustrates a sync circle formed by several devices for several different protection domains.
0034<figref idref="DRAWINGS">FIG. 27</figref> conceptually illustrates a software architecture of a keychain manager of some embodiments.
0035<figref idref="DRAWINGS">FIG. 28</figref> conceptually illustrates an electronic system with which some embodiments of the invention are implemented.
DETAILED DESCRIPTION
0036In the following detailed description of the invention, numerous details, examples, and embodiments of the invention are set forth and described. However, it will be clear and apparent to one skilled in the art that the invention is not limited to the embodiments set forth and that the invention may be practiced without some of the specific details and examples discussed. For instance, many of the figures in this application are described with respect to a particular number of devices for the purposes of simplicity and/or explanation. One of ordinary skill in the art will realize the invention is not limited to the number of devices illustrated in these figures and that the invention may be practiced with any number of different devices.
0037Some embodiments of the invention provide a novel method for facilitating the syncing of keychains between several devices that are specified as members of a synchronization group (also referred to as a sync group or sync circle). A keychain, in some embodiments, is a defined collection of data that may include passwords, private keys, certificates, secure notes, etc. In some embodiments, the method syncs the keychains between the devices through a P2P network. The method of some embodiments employs a communication security feature for preventing unauthorized access of communications between the devices.
0038Different embodiments use different techniques to implement the P2P network through which the devices communicate with each other. For instance, some embodiments employ an overlay network with a fully connected mesh topology while other embodiments use an overlay network with a star topology. Still, some embodiments utilize any number of additional and/or different overly networks to implement the P2P network.
0039In some embodiments, the method provides a secure transport layer for protecting the data that the devices communicate with each other. The method of some embodiments implements the secure transport layer by providing a secure communication channel between each pair of devices using a message-based communication protocol (e.g., OTR messaging) while the method of other embodiments implements the secure transport layer by providing a secure communication channel between each pair of devices using a stream-based communication protocol (e.g., SSL).
0040The method of some embodiment synchronizes a keychain between devices by synchronizing the individual items (also referred to as keychain items) of the keychain (as opposed to syncing the entire keychain). In some instances when syncing keychain items, the method of some embodiments detects conflicts between multiple versions of the same keychain item. The method of different embodiments resolves such conflicts in different ways. For example, in some embodiments, the method uses the most recent version of the keychain item as the keychain item to be synced between the devices. Additional and/or different approaches may be used in some embodiments.
0041In some embodiments, the method provides a data protection feature for limiting access to keychain data (e.g., keychain items) on a device according to defined set of conditions and/or requirements. For example, each keychain item on a device is specified, in some embodiments, as belonging to a particular protection domain. The method of some embodiments allows a device to access a particular keychain item only when a set of conditions and/or requirements defined for the particular protection domain to which the particular keychain item belongs is met. Examples of conditions and/or requirements include the device being in an unlocked state, the device being in a locked state, a user of the device entering a particular password, etc. Under this approach, access to the keychain items on a device may be controlled in a granular fashion. <figref idref="DRAWINGS">FIG. 1</figref> conceptually illustrates synchronizing passwords between several devices A-C according to some embodiments of the invention. Specifically, <figref idref="DRAWINGS">FIG. 1</figref> illustrates devices A-C at three different stages <b>105</b>-<b>115</b> of an example synchronization of passwords between devices A-C. In this example, devices A-C are specified as members of a sync circle that synchronize passwords with each other. Each of the devices A-C may be a desktop computer, a laptop, a smartphone, a tablet, or any other type of computing device.
0042The first stage <b>105</b> illustrates that the passwords <b>1</b>-<b>3</b> are synchronized between devices A-C as indicated by each of the devices A-C having copies of the same passwords <b>1</b>-<b>3</b>. For this example, the passwords <b>1</b>-<b>3</b> on each of the devices A-C are stored on the device in an encrypted format that only the device can decrypt and access. This security feature is conceptualized in <figref idref="DRAWINGS">FIG. 1</figref> by depicting the set of passwords <b>1</b>-<b>3</b> in each of the devices A-C as a particular shape. In particular, the passwords <b>1</b>-<b>3</b> stored on device A are shown as rectangles, the passwords <b>1</b>-<b>3</b> stored on device B are shown as ovals, and the passwords <b>1</b>-<b>3</b> stored on device C are shown as irregular convex octagons. As such, in this example device A can only decrypt and access rectangular passwords, device B can only decrypt and access oval passwords, and device C can only decrypt and access irregular convex octagon passwords.
0043The second stage <b>110</b> of <figref idref="DRAWINGS">FIG. 1</figref> shows that a password <b>4</b> is added to device A (e.g., a user of device A using device A to create the password <b>4</b>). As shown, the password <b>4</b> is encrypted and stored on device A in a rectangular shape. In the second stage <b>110</b>, device A is sending device B and C a copy of the password <b>4</b> in order to sync the password <b>4</b> with device B and C. in some embodiments, when device A receives the password <b>4</b>, device A sends to device B a copy of the password <b>4</b> that is encrypted in a format that only device B can decrypt and sends to device C another copy of the password <b>4</b> that is encrypted in a format that only device C can decrypt. This is indicated by device A sending the password <b>4</b> to device B as an oval shape and sending the password <b>4</b> to device C as an irregular convex octagon shape.
0044As mentioned above, some embodiments provide a communication security feature for preventing unauthorized access of communications between the devices. To protect the communication with device B, device A in this example encrypts and sends a copy of the password <b>4</b> to device B through a secure channel using a secure communication protocol (e.g., SSL, OTR, etc.). A secure communication channel of some embodiments is an authenticated and encrypted communication channel. In some embodiments, device B stores the password <b>4</b> in the encrypted format that was used to transmit the password <b>4</b> over the secure channel. Similarly, device C in some embodiments stores the password <b>4</b> in the encrypted format that was used to transmit the password over the secure channel.
0045The third stage <b>115</b> shows the passwords <b>1</b>-<b>4</b> synchronized between devices A-C. As shown, device B is storing an encrypted copy of the password <b>4</b> that device B received from device A and, thus, is in sync with device A. Likewise, device C is storing an encrypted copy of the password <b>4</b> that device C received from device A and, therefore, is synchronized with device A. As discussed above, in this example, the password <b>4</b> stored on device B is encrypted in a format that only device B can decrypt, and the password <b>4</b> stored on device C is encrypted in a format that only device C can decrypt.
0046Numerous details, examples, and embodiments are described in this application that refer to devices storing passwords for synchronizing among devices that are members of a sync circle. However, one of ordinary skill in the art will understand that in some embodiments one or more of the devices in the sync circle also stores passwords that are not shared (i.e., synchronized) with some or all of the other devices in the sync circle.
0047Moreover, although the majority of the details, examples, and embodiments explained in this application are directed at syncing passwords that are stored as part of a keychain, one of ordinary skill in the art will realize that the invention is not limited to syncing passwords and that the invention may be practiced to synchronize other types of data (e.g., private keys, certificates, secured notes, etc.) in a keychain among devices in a sync circle. In addition, one of ordinary skill in the art will recognize that the invention can be practiced to synchronize more than one keychain among devices in a sync circle.
0048Several more detailed embodiments of the invention are described in the sections below. Section I conceptually describes details of example P2P network architectures according to some embodiments of the invention. Next, Section II conceptually describes creating a sync circle and registering devices into the sync circle according to some embodiments of the invention. Section III describes details of synchronizing keychains between devices in a sync circle according to some embodiments of the invention. Next, Section IV describes a data protection feature for keychains according to some embodiments of the invention. Section V describes a software architecture for a keychain manager of some embodiments. Finally, Section VI describes an electronic system that implements some embodiments of the invention.
I. Peer-to-Peer Network Architectures
0049As mentioned above, some embodiments sync keychains between devices that are members of a sync circle through a P2P network. The P2P network of different embodiments are implemented using different network architectures in order to facilitate communication between the devices in the sync circle. The following figures illustrate several examples of different implementations of P2P network architectures.
0050<figref idref="DRAWINGS">FIG. 2</figref> conceptually illustrates a network architecture for a direct P2P network according to some embodiments of the invention. In this example, devices A-C are members of a sync circle. As shown, each of the devices A-C includes a storage <b>210</b> for storing passwords and a keychain manager <b>205</b>. The keychain manager <b>205</b> of some embodiments is responsible for performing the functions for facilitating the synchronization of passwords between devices A-C. For instance. In some embodiments, the keychain manager <b>205</b> handles the registration of the device into sync circles, syncing passwords between devices A-C, resolving conflicts between conflicting passwords, generating different types of manifests of keychains, providing a secure communication channel for transporting data between devices A-C, etc.
0051As illustrated in <figref idref="DRAWINGS">FIG. 2</figref>, devices A-C communicate with each other through an overlay network with a fully connected mesh topology. As such, each of the devices A-C can directly communicate with each of the other devices. That is, device A can directly communicate with devices B and C, device B can directly communicate with devices A and C, and device C can directly communicate with devices A and B.
0052As noted above, some embodiments provide a secure transport layer to protect the data that devices communicate with each other. For this example, devices A-C communicate with each other through secure communication channels established between each pair of devices A-C. The secure communication channels may be implemented using any number of different protocols, such as message-based communication protocols (e.g., OTR messaging), stream-based communication protocols (e.g., SSL), etc.
0053<figref idref="DRAWINGS">FIG. 3</figref> conceptually illustrates a network architecture for an indirect P2P network according to some embodiments of the invention. Similar to <figref idref="DRAWINGS">FIG. 2</figref>, for this example, devices A-C are members of a sync circle and each of the devices A-C includes the storage <b>210</b> and the keychain manager <b>205</b>.
0054As shown in <figref idref="DRAWINGS">FIG. 3</figref>, devices A-C communicate with each other through an overlay network with a star topology. In particular, devices A-C communicate with each other through cloud services <b>305</b>, which serves as the center of the star topology and provides a cloud storage service for storing data as well as other cloud services (e.g., cloud computing services). For instance, when device A wishes to communicate data to device B, device A stores the data in the cloud services <b>305</b>, the cloud services <b>305</b> notifies (e.g., via a push notification service) device B about the data, and device B retrieves the data from the cloud services <b>305</b>.
0055As illustrated, the cloud services <b>305</b> stores a name for a sync circle and a sync circle device list in storage <b>310</b> that specifies the devices that are members of the sync circle. In some embodiments, the devices are specified by data uniquely identifying the devices. Examples of such data include a public key of a device signing public/private key pair for authenticating the identity of a device, a device type of the device (e.g., a desktop computer, a tablet, a smartphone, etc.), a name of the device, etc., or a combination of any number of such data.
0056The cloud services <b>305</b> also stores user signatures in storage <b>315</b>. A user signature in some embodiments is a digital signature for authenticating the identity of a user as the signer of a message, document, or any other type of data. In some embodiments, the sync circle is linked to a cloud services account and devices associated with the cloud services account (e.g., devices that have an application or program for accessing the cloud services associated with the account) are candidates for registering into the sync circle. The storage <b>315</b> in some such embodiments includes signatures signed with a private key of a user signing public/private key pair generated based on a password of the cloud services account to indicate that the user of the cloud services <b>305</b> account is the signer. Examples of user signatures that are stored in the storage <b>315</b> include a signature of the sync circle device list signed with a private key of a user signing public/private key pair, signatures of registration requests signed with the private key of the user signing key pair, and/or any other signatures for authenticating the identity of the user of the cloud services account.
0057<figref idref="DRAWINGS">FIG. 3</figref> also shows that the cloud services <b>305</b> stores device signatures in storage <b>320</b>. In some embodiments, a device signature is a digital signature for authenticating the identity of a device in the sync circle as the signer of a message, document, or any other type of data. For example, in some embodiments, the storage <b>320</b> includes signatures of the sync circle device list signed with a private key of a device signing public/private key pair that belongs to a device that is a member of the sync circle. Such a signature indicates that the signing device affirms the list of devices in the sync circle device list as the members of the sync circle. In some embodiments, when the sync circle is in a steady state (e.g., no registration requests are pending nor unapproved), the device signatures in the storage <b>320</b> includes for each device that is a member of the sync circle a signature of the sync circle device list signed with a private key of the device's device signing public/private key pair. That is, the signatures in such instances collectively indicate that every device listed in the sync circle device list agrees that the devices listed in the sync circle device list are the members of the sync circle.
0058In addition, the cloud services <b>305</b> stores keychain data in storage <b>325</b> for syncing keychains between the devices in the sync circle, and other data in storage <b>330</b> that may include a public key of a user signing public/private key pair, a random string (e.g., a 256-bit string) shared between the devices in the sync circle for generating the user signing key pair, and a list of pending registration requests. In some embodiments, the cloud services <b>305</b> implements the storages <b>310</b>-<b>330</b> as key-value stores.
0059While the storages <b>310</b>-<b>330</b> are illustrated in <figref idref="DRAWINGS">FIG. 3</figref> as separate storages, in some embodiments, the storages <b>310</b>-<b>330</b> are implemented as a single storage, while, in other embodiments, the storages <b>310</b>-<b>330</b> are implemented across several storages.
0060In some embodiments, the secure transport layer described above by reference to <figref idref="DRAWINGS">FIG. 2</figref> is utilized to protect the data that devices communicate with each other through the cloud services <b>305</b>. That is, while devices A-C communicate with each other through secure communication channels established between each pair of devices A-C, the devices A-C use the cloud services <b>305</b> as a mechanism for transporting the communications. The secure communication channels of some embodiments may be implemented in some embodiments using any number of different protocols (e.g., message-based communication protocols (e.g., OTR messaging), stream-based communication protocols (e.g., SSL), etc.).
II. Sync Circles
0061As described above, devices that are members of a circle sync circle synchronize keychains among the devices. Such devices are also referred to as peer devices or simply peers in this application. The following section describes examples of creating a sync circle for syncing keychains between devices of the sync circle and adding devices to the sync circle. <figref idref="DRAWINGS">FIG. 4</figref> conceptually illustrates an example of starting a sync circle <b>420</b> and adding devices to the sync circle <b>420</b> according to some embodiments of the invention. In particular, <figref idref="DRAWINGS">FIG. 4</figref> illustrates three stages <b>405</b>-<b>415</b> of registering devices A and B into the sync circle <b>420</b>. Each of the stages <b>405</b>-<b>410</b> shows a conceptual depiction of the sync circle <b>420</b> and a storage <b>425</b> that stores data for the sync circle <b>420</b>. In some embodiments, the storage <b>425</b> is implemented in the cloud storage service <b>305</b> and includes the data in storages <b>310</b>-<b>330</b>, which is described above by reference to <figref idref="DRAWINGS">FIG. 3</figref>. In conjunction with implementing the storage <b>425</b> in a cloud storage service, each device that is a member of the sync circle <b>420</b> stores a copy of the data in the storage <b>425</b> locally on the device, in some embodiments.
0062The first stage <b>405</b> illustrates the sync circle <b>420</b> with no devices registered into the sync circle <b>420</b>. As shown, the sync circle <b>420</b> is empty and the storage <b>425</b> contains no data regarding members of the sync circle <b>420</b>. The sync circle <b>420</b> of some embodiments is linked to a cloud storage service account and devices associated with the cloud storage service account (e.g., devices that have an application or program for accessing the cloud storage associated with the account) are candidates for registering into the sync circle <b>420</b>. The storage <b>425</b> in some such embodiments stores metadata describing the devices associated with the account.
0063The second stage <b>410</b> shows the sync circle <b>420</b> with a device registered into the sync circle <b>420</b>. As shown in the second stage <b>410</b>, device A is registered into the sync circle <b>420</b> and the storage <b>425</b> is storing data identifying device A as a member of the sync circle <b>420</b>. In some embodiments, the sync circle <b>420</b> does not actually exist when the sync circle <b>420</b> is empty. The sync circle <b>420</b> is created in some such embodiments when a first device registers into the sync circle <b>420</b>. When a user of one of the devices associated with the cloud storage service account enables a keychain syncing feature on the device, the device creates the sync circle <b>420</b> and registers itself into the sync circle <b>420</b>.
0064To register into the sync circle <b>420</b>, the device A stores data in the storage <b>425</b> that uniquely identifies device A as a member of the sync circle <b>420</b>. Examples of such data include a public key of a device signing public/private key pair for authenticating device A, a device type of device A (e.g., a desktop computer, a tablet, a smartphone, etc.), a name of device A, etc., or a combination of any number of such data.
0065In some embodiments, each device that is in the sync circle <b>420</b> or may potentially join the sync circle <b>420</b> uses the same public-key cryptography algorithm (e.g., an RSA algorithm, an elliptic curve cryptography (ECC) algorithm, etc.) to generate the device signing key pair so that the devices may encrypt and decrypt each others' messages. Additionally, each device generates in some embodiments a device signing public/private key pair randomly. This way, each device generates a unique device signing public/private key pair that is different from the device signing public/private key pairs generated by any other device.
0066In some embodiments, device A (1) generates a signature of the data identifying the members of the sync circle <b>420</b> (the data uniquely identifying device A in this example) by encrypting the data with a private key of a user signing public/private key pair for authenticating the user of the cloud storage service account and (2) stores the signed data in the storage <b>425</b>. The user signing public/private key pair of some embodiments is generated based on (1) a password associated with the cloud storage service account and (2) a random string (e.g., a 256-bit string) that is shared among the devices in the sync circle <b>420</b>.
0067Each device that is in the sync circle <b>420</b> or may potentially join the sync circle <b>420</b> uses in some embodiments the same public-key cryptography algorithm (e.g., an RSA algorithm, an ECC algorithm, etc.) to generate the user signing key pair. In some embodiments, such devices utilizes the public-key cryptography algorithm that is used to generate a device signing key pair to also generate a user signing key pair. The devices all generate the same public/private key pair since the devices each uses the password associated with the cloud storage service account and the random string as input for the same public-key cryptography algorithm. As such, the signature of the data identifying the members of the sync circle <b>420</b> in this example is for authenticating that the user of the cloud storage service account is registering device A into the sync circle <b>420</b>. Since device A is the first device registered into the sync circle <b>420</b>, device A stores the public key of the user signing key pair and the random string in the storage <b>425</b>.
0068The third stage <b>415</b> illustrates another device registered into the sync circle <b>420</b>. As shown, device B is registered into the sync circle <b>420</b>, and the storage <b>425</b> is storing data identifying device B as also a member of the sync circle <b>420</b>. In addition, since device A and device B are members of the sync circle <b>420</b>, the passwords on devices A and B are synchronized.
0069In order for device B to register into the sync circle <b>420</b>, some embodiments require (1) that device B submit a request to join the sync circle <b>420</b> by storing the request in the storage <b>425</b> and (2) that device A approve of the request. Different embodiments define different requirements to approve a request to join a sync circle. For instance, some embodiments require only one device that is a member of the sync circle to approve of the request while other embodiments require every device that is a member of the sync circle to approve of the request.
0070<figref idref="DRAWINGS">FIG. 5</figref> conceptually illustrates a process <b>500</b> of some embodiments for requesting to join a sync circle. In some embodiments, a device requesting to join a sync circle performs the process <b>500</b> (e.g., upon a user of the device enabling a keychain syncing feature on the device). The process <b>500</b> will be described by reference to device B of <figref idref="DRAWINGS">FIG. 4</figref> performing the process <b>500</b>.
0071The process <b>500</b> starts by prompting (at <b>510</b>) a user of device B for a password. In some embodiments, the process <b>500</b> prompts the user for the password by displaying a pop-up window on the display screen of device B requesting the user to enter the password to the cloud storage service account.
0072Next, the process <b>500</b> generates (at <b>520</b>) a user signing public/private key pair based on the password provided by the user. In some embodiments, the process <b>500</b> generates the user signing key pair based on the password and the random string for sharing between members of the sync circle <b>420</b>. The process <b>500</b> of some such embodiments retrieves the random string from the storage <b>425</b> in order to generate the user signing key pair. In different embodiments, the process <b>500</b> of uses different techniques to generate a user signing key pair. For instance, in some embodiments, the process <b>500</b> may use an RSA algorithm, an ECC algorithm, or any other type of public-key cryptography, to generate the device signing key pair.
0073The process <b>500</b> then generates (at <b>530</b>) a device signing public/private key pair for authenticating device B. The process <b>500</b> of different embodiments uses different techniques to generate a device signing key pair. In some embodiments, the process <b>500</b> generates the device signing key pair using the same type of public-key cryptography used to generate the user signing key pair at <b>520</b>. In other embodiments, the process <b>500</b> uses a different type of public-key cryptography to generate the device signing key pair.
0074Once the device signing key pair is generated, the process <b>500</b> generates (at <b>540</b>) a request to join the sync circle <b>420</b>. In some embodiments, the request includes the public key of device B's device signing key pair for uniquely identifying device B and the list of devices in the sync circle <b>420</b> that the process <b>500</b> retrieves from the storage <b>425</b>.
0075Next, the process <b>500</b> generates (at <b>550</b>) signatures of the request based on the generated key pairs. Specifically, the process <b>500</b> generates (1) a signature of the request with the private key of the user signing key pair and (2) a signature of the request with the private key of device B's device signing key pair.
0076Finally, the process <b>500</b> submits (at <b>560</b>) the request and the generated signatures. In some embodiments, the process <b>500</b> submits the request by adding the request to a registration request list stored in the storage <b>425</b>. The process <b>500</b> of some embodiments submits the signatures by storing in the storage <b>425</b> the signature of the request signed with the private key of the user signing key pair and the signature of the request with the private key of device B's device signing key pair.
0077<figref idref="DRAWINGS">FIG. 6</figref> conceptually illustrates a process of some embodiments for processing a request to join a sync circle. In some embodiments, a device that is a member of the sync circle performs the process <b>600</b> when the device receives a notification (e.g., via a push notification service) that a request to join the sync circle has been submitted and is pending. The process <b>600</b> will be described by reference to device A of <figref idref="DRAWINGS">FIG. 4</figref> performing the process <b>600</b>.
0078The process <b>600</b> begins by retrieving (at <b>610</b>) the request to add device B to the sync circle <b>420</b>. In some embodiments, the process <b>600</b> retrieves the request by accessing the storage <b>425</b> and retrieving the request from the registration request list, the signature of the request signed with the private key of device B's device signing key pair, and the signature of the request signed with the private key of the user signing key pair.
0079Next, the process <b>600</b> determines (at <b>620</b>) whether the request is authenticated. In some embodiments, the process <b>600</b> authenticates the request when the process <b>600</b> verifies (1) that the user of the cloud storage service account submitted the request to register device B into the sync circle <b>420</b> and (2) that the request to register a device into the sync circle <b>420</b> is actually for registering device B. To verify that the user of the cloud storage service account submitted the request to register device B, the process <b>600</b> of some embodiments (1) decrypts the signature of the request that was signed with the private key of the user signing key pair with the public key of the user signing key pair and (2) checks that the request data retrieved from the registration request list matches the decrypted signature. In other words, the process <b>600</b> checks that the decrypted signature of the request signed with the private key of the user signing key pair includes the public key of device B's device signing key pair and the list of devices in the sync circle <b>420</b>.
0080In some embodiments, the process <b>600</b> verifies that the request to register a device into the sync circle <b>420</b> is for registering device B by (1) decrypting the signature of the request that was signed with the private key of device B's device signing key pair with the public key of device B's device signing key pair and (2) checking that the request data retrieved from the registration request list matches the decrypted signature. Alternatively or in addition to decrypting the signature of the request that was signed with the private key of device B's device signing key pair, the process <b>600</b> of some embodiments uses other techniques to verify that the request to register a device into the sync circle <b>420</b> is for registering device B. For instances, the process <b>600</b> may prompt the user to enter a password, passcode, personal identification number (PIN) code, etc., that was randomly generated and displayed on device B when device B requested to register into the sync circle, select an image displayed on device A that matches an image displayed on device B when device B was requesting to register into the sync circle <b>420</b>, etc.
0081At <b>630</b>, the process <b>600</b> determines whether the request is already approved by a device in the sync circle. In some embodiments, the process <b>600</b> determines that the request is already approved by a device in the sync circle when the storage <b>425</b> includes a signature of (1) the list of devices in the sync circle <b>420</b> and (2) the requesting device that is signed with the private key of a device signing public/private key pair that belongs to a device in the sync circle.
0082When the process <b>600</b> determines that the request is already approved, the process <b>600</b> acknowledges (at <b>640</b>) the approval of the request and then the process <b>600</b> ends. The process <b>600</b> of some embodiments acknowledges the approval of the request by (1) generating a signature of the sync circle device list (which now includes the newly approved device) with the private key of the device signing key pair of the device on which the process <b>600</b> is running and (2) storing the generated signature with device signatures in the storage <b>425</b>.
0083When the process <b>600</b> determines that the request is not already approved, the process <b>600</b> prompts (at <b>650</b>) the user to approve the request. Different embodiments approve requests in different ways. For example, the process <b>600</b> of some embodiments approves the request when the user provides the password to the cloud storage service account. Since the device of some embodiments does not store the password to the cloud storage service account when the user enters it into the device, the process <b>600</b> of some embodiments prompts the user for the password by displaying a pop-up window on the display screen of device A that (1) indicates the device name of device B (e.g., “John Doe's smartphone”) has requested to join the sync circle <b>420</b> and (2) requests the user to enter the password associated with the cloud storage service account.
0084Next, the process <b>600</b> determines (at <b>660</b>) whether input to approve the request is received from the user. When the process <b>600</b> determines that input for approving the request is not received, the process returns to <b>660</b> to continue checking for input from the user. When the process <b>600</b> determines that input for approving the request is received, the process <b>600</b> proceeds to <b>670</b>
0085At <b>670</b>, the process determines whether the user approval is authenticated. In instances where the password to the cloud storage service account is used to verify that the user of the cloud storage service account approved the request, the process <b>600</b> of some embodiments authenticates the user approval by generating a user signing public/private key pair based on the password provided by the user at <b>650</b> and the random string stored in the storage <b>425</b> and verifies that the public key that the process <b>600</b> generated matches the public key of the user signing key pair stored in the storage <b>425</b>. As explained above, each device that is in the sync circle <b>420</b> or may potentially join the sync circle <b>420</b> uses the same algorithm to generate the user signing key pair in some embodiments. Thus, the public key generated by the process <b>600</b> matching the public key of the user signing key pair stored in the storage <b>425</b> verifies that the user of the cloud storage service account approved the request.
0086When the process <b>600</b> determines that the user approval is not authenticated, the process <b>600</b> ends. When the process <b>600</b> determines that the user approval is authenticated, the process <b>600</b> adds (at <b>680</b>) the requesting device to the sync circle. In some embodiments, the process <b>600</b> adds device B to the sync circle <b>420</b> by adding data uniquely identifying device B to the sync circle device list for the sync circle <b>420</b>, generating a signature of the sync circle device list with the private key of device A's device signing key pair, and storing the generated signature with the device signatures in the storage <b>425</b>.
0087Finally, the process <b>600</b> synchronizes (at <b>690</b>) with device B the keychains that are specified to be synchronized between devices in the sync circle <b>420</b>. In some embodiments, the process <b>600</b> synchronizes keychains using the techniques described below by reference to <figref idref="DRAWINGS">FIGS. 7-15</figref>.
0088While <figref idref="DRAWINGS">FIG. 6</figref> illustrates adding a requesting device to a sync circle upon one device in the sync circle approving of the request, one of ordinary skill will understand that any number of different approval requirements may be used in different embodiments. For instance, some embodiments may require all the devices, a defined number of devices, a defined percentage of devices, etc., in the sync circle to approve the device before the requesting device may be added to the sync circle.
0089Some embodiments allow a device to be removed from a sync circle. For instance, if a user of a device in the sync circle suspects that another device in the sync circle was not authorized to join the sync circle, the user lost a device in the sync circle, a device in the sync circle was stolen, etc., the user may remove the unwanted device from the sync circle. Different embodiments handle the removal of a device from a sync circle differently. For example, in some embodiments, when a device is removed from a sync circle, the remaining devices in the sync circle continue synchronizing passwords between the remaining devices. The removed device in some such embodiments is required to go through the registration process (e.g., the ones described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>) again in order for the device to be added back into the sync circle. Under another approach, the sync circle is destroyed (e.g., the sync circle device list is deleted) when a device is removed from a sync circle. In such cases, the sync circle must be reestablished and devices added to the newly established sync circle (e.g., using the examples and processes described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>).
III. Synchronizing Passwords
0090Once a sync circle is established and at least two devices are registered into the sync circle, the method of some embodiments is used to facilitate the syncing of keychains between the devices that are specified as members of the sync circle. As noted above, in some embodiments, the method utilized a P2P network to communicate data between the devices in order to sync the keychains between the devices.
0091<figref idref="DRAWINGS">FIG. 7</figref> conceptually illustrates an example data flow through the network architecture illustrated in <figref idref="DRAWINGS">FIG. 2</figref> for syncing passwords. Specifically, <figref idref="DRAWINGS">FIG. 7</figref> conceptually illustrates data flow operations <b>1</b>-<b>9</b> for synchronizing passwords between devices that are members of a sync circle when a new password is created on one of the devices in the sync circle. In this example, the establishment of the sync circle and the registration of devices A-C into the sync circle are implemented using techniques similar to the ones described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>. As mentioned, the network architecture illustrated in <figref idref="DRAWINGS">FIG. 7</figref> is similar to the one described above by reference to <figref idref="DRAWINGS">FIG. 2</figref>. That is, each of the devices A-C includes the keychain manager <b>205</b> for facilitating the synchronization of passwords and the storage <b>210</b> for storing passwords. In addition, devices A-C communicate with each other through an overlay network with a fully connected mesh topology that allows each of the devices A-C to directly communicate with each of the other devices. In some embodiments, for every pair of the devices A-C (i.e., devices A and B, devices A and C, and devices B and C), the keychain managers <b>205</b> on the devices facilitate the provisioning of a secure communication channel (e.g., using OTR messaging, SSL, etc.) between the pair of devices for transporting data between the devices.
0092Before the start of the data flow operations <b>1</b>-<b>9</b> in <figref idref="DRAWINGS">FIG. 7</figref>, the passwords on devices A-C are synchronized. In other words, devices A-C each have the same passwords stored in the storage <b>210</b>. The data flow starts by adding (at encircled <b>1</b>) a password <b>705</b> to device A. For example, a user of device A might have installed a social networking application (e.g., a Facebook® application, a Twitter® application, a Google+® application, a LinkedIn® application, etc.) that requires the user to enter a username and password associated with the user's social networking account.
0093When device A receives the new password <b>705</b>, device A encrypts and stores (at encircled <b>2</b>) the password <b>705</b> in device A's storage <b>210</b>. In some embodiments, the passwords stored in the storages <b>210</b> of devices A-C are protected using a symmetric-key algorithm (a data encryption standard (DES) algorithm, a triple data encryption algorithm (TDEA), an advanced encryption standard (AES) using 256-bit block sizes and a Galois/Counter Mode (GCM), etc.) and a key (e.g., a password or passcode for logging into the device, a random key generated by the device or assigned, etc., or a combination of any number of such keys). When device A stores the password <b>705</b> in the storage <b>210</b>, the keychain manager <b>205</b> encrypts the password using the symmetric-key algorithm and the key.
0094After storing the password <b>705</b>, device A decrypts and encrypts (at encircled <b>3</b>) the password <b>705</b> for each of the devices B and C. To decrypt the encrypted password <b>705</b> stored in the storage <b>205</b>, the keychain manager <b>205</b> uses the symmetric-key algorithm and the key described above that is used to encrypt the password <b>705</b> when device A stores the password <b>705</b> in the storage <b>210</b>.
0095As mentioned above, a secure communication channel is used between every pair of devices A-C to protect data that is transported between the devices. Since the pair of devices A and B and the pair of devices A and C each uses separate secure communication channels, the keychain manager <b>205</b> of device A encrypts a copy of the password <b>705</b> to send to device B using a first key or set of keys based on the secure communication channel device A has established with device B. The keychain manager <b>205</b> of device A also encrypts another copy of the password <b>705</b> to send to device C using a second, different key or set of keys based on the secure communication channel device A has established with device C.
0096As an example, a secure communication channel between devices A and B and a secure communication channel between devices A and C are each implemented in some embodiments using OTR messaging. In some such embodiments, an OTR session is established between devices A and B based on public/private key pairs of devices A and B. In addition, another, separate OTR session is established between devices A and C based on public/private key pairs of devices A and B. In some embodiments, the device signing key pairs are the same ones generated for registering devices A-C into a sync circle, as described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>.
0097Once the keychain manager <b>205</b> of device A encrypts a copy of the password <b>705</b> for device B, device A sends (at encircled <b>4</b>) the encrypted copy of the password <b>705</b> and metadata describing the password <b>705</b> to device B through the secure communication channel established between devices A and B. Examples of metadata for describing the password <b>705</b> includes a type of the password (an Internet password, an application password, a network password, etc.), a name of an application or website to which the password is associated or for which the password is used, a path of the application or website, etc.
0098When device B receives the encrypted copy of the password <b>705</b>, device B decrypts (at encircled <b>5</b>) the copy of the password <b>705</b> by using a key or set of keys generated for the secure communication channel established with device A. Upon decrypting the copy of the password <b>705</b>, device B encrypts and stores (at encircled <b>6</b>) the copy of the password <b>705</b> in the storage <b>210</b> of device B. Device B is now updated with the password <b>705</b> and, therefore, the passwords stored on device B are synchronized with the passwords stored on device A.
0099Turning to the data flow operations for syncing passwords between devices A and C, after the keychain manager <b>205</b> of device A encrypts a copy of the password <b>705</b> for device C, device A sends (at encircled <b>7</b>) the encrypted copy of the password <b>705</b> and metadata describing the password <b>705</b> to device C through the secure communication channel established between devices A and C. In some embodiments, the metadata that device A sent along with the encrypted copy of the password <b>705</b> to device B is the same metadata that device A sends to device C.
0100Upon receiving the encrypted copy of the password <b>705</b>, device C decrypts (at encircled <b>8</b>) the copy of the password <b>705</b> by using a key or set of keys generated for the secure communication channel established with device A. When device C has decrypted the copy of the password <b>705</b>, device C then encrypts and stores (at encircled <b>9</b>) the copy of the password <b>705</b> in the storage <b>210</b> of device C. Device C is now updated with the password <b>705</b> and, thus, the passwords stored on device C are synchronized with the passwords stored on device A.
0101<figref idref="DRAWINGS">FIGS. 8 and 9</figref> conceptually illustrate an example data flow through the network architecture illustrated in <figref idref="DRAWINGS">FIG. 3</figref> for syncing passwords. In particular, <figref idref="DRAWINGS">FIGS. 8 and 9</figref> conceptually illustrate data flow operations <b>1</b>-<b>11</b> for synchronizing passwords between devices that are members of a sync circle when a new password is created on one of the devices in the sync circle. <figref idref="DRAWINGS">FIG. 8</figref> conceptually illustrates data flow operations <b>1</b>-<b>8</b>, which are performed in response to a new password created on device C, for synchronizing passwords between devices C and A while device B is offline. <figref idref="DRAWINGS">FIG. 9</figref> conceptually illustrates device B coming online and syncing device B's passwords with devices C and A. In this example, the establishment of the sync circle and the registration of devices A-C into the sync circle are implemented using techniques similar to the ones described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>.
0102As mentioned, the network architecture illustrated in <figref idref="DRAWINGS">FIGS. 8 and 9</figref> are similar to the one described above by reference to <figref idref="DRAWINGS">FIG. 3</figref>. That is, each of the devices A-C includes the keychain manager <b>205</b> for facilitating the synchronization of passwords and the storage <b>210</b> for storing passwords. Also, devices A-C communicate with each other through an overlay network with a star topology that allows with each of the devices A-C to indirectly communicate with each of the other devices through cloud services <b>305</b>, which serves as the center of the star topology and provides a cloud storage service for storing data. The cloud services <b>305</b> of some embodiments stores a name for a sync circle and a sync circle device list in the storage <b>310</b>, user signatures in the storage <b>315</b> for authenticating a user of the devices, device signatures in the storage <b>320</b> for authenticating devices in the sync circle, keychain data in the storage <b>325</b> for syncing keychains between the devices in the sync circle, and other data in the storage <b>330</b>. Additionally, in some embodiments, for every pair of the devices A-C (i.e., devices A and B, devices A and C, and devices B and C), the keychain managers <b>205</b> on the devices establish a secure communication channel (e.g., using OTR messaging, SSL, etc.) between the pair of devices through which the pair of devices communicate. The devices A-C in this example data use the cloud services <b>305</b> as the means for transporting the communications.
0103Prior to the start of the data flow operations <b>1</b>-<b>11</b> in <figref idref="DRAWINGS">FIGS. 8 and 9</figref>, the passwords on devices A-C are synchronized. That is, devices A-C each have the same passwords stored in the storage <b>210</b>. Additionally, the data flow begins by adding (at encircled <b>1</b>) a password <b>805</b> to device C. For instance, a user of device C might have installed a social networking application (e.g., a Facebook® application, a Twitter® application, a Google+® application, a LinkedIn® application, etc.) that requires the user to enter a username and password associated with the user's social networking account.
0104When device C receives the new password <b>805</b>, device C encrypts and stores (at encircled <b>2</b>) the password <b>805</b> in device C's storage <b>210</b>. In some embodiments, the passwords stored in storages <b>210</b> of devices A-C are protected using a symmetric-key algorithm (a data encryption standard (DES) algorithm, a triple data encryption algorithm (TDEA), etc.) and a key (e.g., a password or passcode for logging into the device, a random key generated by the device or assigned, etc., or a combination of any number of such keys). When device A stores the password <b>805</b> in the storage <b>210</b>, the keychain manager <b>205</b> encrypts the password <b>805</b> using the symmetric-key algorithm and the key.
0105After storing the password <b>805</b>, device C decrypts and encrypts (at encircled <b>3</b>) the password <b>805</b> for each of the devices A and C. To decrypt the encrypted password <b>805</b> stored in the storage <b>205</b>, the keychain manager <b>205</b> uses the symmetric-key algorithm and the key described above that is used to encrypt the password <b>805</b> when device C stores the password <b>805</b> in the storage <b>210</b>.
0106As noted above, a secure communication channel is used between every pair of devices A-C to protect data that is transported between the devices. Since the pair of devices A and B and the pair of devices A and C each uses separate secure communication channels, the keychain manager <b>205</b> of device A encrypts a copy of the password <b>805</b> to send to device B using a first key or set of keys based on the secure communication channel device A has established with device B. The keychain manager <b>205</b> of device A also encrypts another copy of the password <b>805</b> to send to device C using a second, different key or set of keys based on the secure communication channel device A has established with device C.
0107For instance, a secure communication channel between devices C and A and a secure communication channel between devices C and B are each implemented in some embodiments using OTR messaging. An OTR session is established in some such embodiments between devices C and A based on device signing public/private key pairs of devices C and A. Additionally, another, separate OTR session is established between devices C and B based on device signing public/private key pairs of devices C and B. The device signing key pairs of some embodiments are the same ones generated for registering devices A-C into a sync circle, as described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>.
0108Once the keychain manager <b>205</b> of device C encrypts a copy of the password <b>805</b> for device A and another copy of the password <b>805</b> for device B, device C stores (at encircled <b>4</b>) the encrypted copies of the password <b>805</b> and metadata describing the password <b>805</b> in the storage <b>325</b> of the cloud services <b>305</b>. Examples of metadata for describing the password <b>805</b> includes a type of the password (an Internet password, an application password, a network password, etc.), a name of an application or website to which the password is associated or for which the password is used, a path of the application or website, etc.
0109As explained above, the storages <b>310</b>-<b>330</b> are implemented as key-value stores in some embodiments. The key of some embodiments for data stored in the cloud services <b>305</b> (e.g., the storage <b>325</b>) by a sending device that is intended for a receiving device is a concatenation of the name of the sync circle to which the first and second devices belong, an identifier of the sending device, and an identifier of the receiving device. In some embodiments, the receiving device registers with this key-value pair so that when the value of the key-value pair changes (e.g., a value is added, modified, deleted, etc.) by the sending device, the cloud services <b>305</b> notifies the receiving device (e.g., via a push notification service).
0110Under such an approach, when the cloud services <b>305</b> receives from device C the copy of the password <b>805</b> and its corresponding metadata for device A, the cloud services <b>305</b> stores (at encircled <b>5</b>) the data in the storage <b>325</b> as the value of the key formed in the manner described above. The cloud services <b>305</b> then notifies (e.g., via a push notification service) device A that the value associated with the key changed (e.g., data is added in this example). Similarly, when the cloud services <b>305</b> receives from device C the copy of the password <b>805</b> and its corresponding metadata for device B, the cloud services <b>305</b> stores (at encircled <b>5</b>) the data in the storage <b>325</b> as the value of the key formed in the manner described above. The cloud services <b>305</b> then notifies (e.g., via a push notification service) device B that the value associated with the key changed (e.g., data is added in this example). Since device B is shown as offline in <figref idref="DRAWINGS">FIG. 8</figref>, device B does not receive the notification yet in this example.
0111Continuing with <figref idref="DRAWINGS">FIG. 8</figref>, when device A receives the notification from the cloud services <b>305</b>, device A retrieves (at encircled <b>6</b>) the copy of the encrypted password <b>805</b> and the associated metadata using the same key that device C used to store the copy of the encrypted password <b>805</b> and the metadata in the cloud services <b>305</b>. Once device A retrieves the password data, device A decrypts (at encircled <b>7</b>) the copy of the password <b>805</b> by using a key or set of keys generated for the secure communication channel established with device C. Upon decrypting the copy of the password <b>805</b>, device A encrypts and stores (at encircled <b>8</b>) the copy of the password <b>805</b> in the storage <b>210</b> of device A. At this point, device A is updated with the password <b>805</b> and, thus, the passwords stored on device A are synchronized with the passwords stored on device C.
0112As illustrated in <figref idref="DRAWINGS">FIG. 9</figref>, device B is now online. When the cloud services <b>305</b> detects that device B is online, the cloud services <b>305</b> sends the notification to device B indicating that the value associated with the key-value pair for receiving data from device C changed (e.g., data is added in this example).
0113When device B receives the notification from the cloud services <b>305</b>, device B retrieves (at encircled <b>9</b>) the copy of the encrypted password <b>805</b> and the associated metadata using the same key that device C used to store the copy of the encrypted password <b>805</b> and the metadata in the cloud services <b>305</b>. After device B retrieves the password data, device B decrypts (at encircled <b>10</b>) the copy of the password <b>805</b> by using a key or set of keys generated for the secure communication channel established with device C.
0114After device B decrypts the copy of the password <b>805</b>, device B encrypts and stores (at encircled <b>11</b>) the copy of the password <b>805</b> in the storage <b>210</b> of device B. At this point, device B is updated with the password <b>805</b> and, therefore, the passwords stored on device B are synchronized with the passwords stored on device C.
0115While the data flow operations in <figref idref="DRAWINGS">FIGS. 7-9</figref> are described in a particular order based on the numerical order of the encircled numbers shown in <figref idref="DRAWINGS">FIGS. 7-9</figref>, one of ordinary skill in the art will recognize that the encircled numbers do not necessarily represent the order of the data flow operations and that the data flow operations may occur in numerous different orders. For instance, the set of sequential data flow operations <b>4</b>-<b>6</b> and the set of sequential data flow operations <b>7</b>-<b>9</b> illustrated in <figref idref="DRAWINGS">FIG. 7</figref> occur independent from each other in some embodiments. Similarly, the set of sequential data flow operations <b>6</b>-<b>8</b> and the set of sequential data flow operations <b>9</b>-<b>11</b> shown in <figref idref="DRAWINGS">FIGS. 8 and 9</figref> occur independent from each other.
0116A. Keychain Data Structure
0117As mentioned above, a keychain, in some embodiments, is a defined collection of data that may include passwords, private keys, certificates, secure notes, etc. In some embodiments, the keychain manager generates and stores a data structure to represent a keychain. <figref idref="DRAWINGS">FIG. 10</figref> conceptually illustrates a data structure <b>1005</b> for a keychain as stored by the keychain manager of some embodiments. As shown, the data structure <b>1005</b> includes a keychain ID <b>1010</b>, keychain items <b>1</b>-N, and access data <b>1015</b>. The keychain ID <b>1010</b> is a unique identifier for identifying the keychain <b>1005</b>. The access data <b>1015</b> is for controlling access (e.g., what applications may access the keychain <b>1005</b> and/or what operations (e.g., read, write, delete, etc.) may be performed on the keychain <b>1005</b>, etc.) to the keychain <b>1005</b> itself and is similar in structure to the access data <b>1035</b> described below.
0118A keychain item of some embodiments represents an individual piece of data (e.g., a password, a key, a certificate, etc.). As shown in <figref idref="DRAWINGS">FIG. 10</figref>, keychain item <b>1020</b> represents keychain item <b>1</b> of the keychain <b>1005</b>. Keychain item <b>1020</b> includes a keychain item ID <b>1025</b>, data <b>1030</b>, attributes <b>1</b>-M, an access data <b>1035</b> (also referred to as an access object). The keychain item ID <b>1025</b> is a unique identifier for identifying the keychain item <b>1020</b>.
0119Data <b>1030</b> is the actual data value and/or values of the keychain item <b>1020</b>. For instance, if the keychain <b>1020</b> represents a password, the data <b>1030</b> stores the value of the password (e.g., a string of alphanumeric characters). In some embodiments, the keychain manager encrypts the data of certain types of a keychain items (e.g., passwords, private keys, etc.) when the keychain manager stores the data. For the data of other types of keychain items (e.g., certificates), the keychain manager simply stores the data without encrypting the data.
0120Attributes <b>1</b>-M of the keychain item <b>1020</b> are for storing metadata describing the keychain item <b>1020</b>. Different types of keychain items have different sets of attributes. For example, Internet passwords have attributes that include attributes such as security domain, protocol type (e.g., hypertext transfer protocol (HTTP), hypertext transfer protocol secure (HTTPS), file transfer protocol (FTP), etc.), path (e.g., a uniform resource locator (URL) of an Internet resource), etc.
0121Each keychain item in some embodiments includes a date field attribute that indicates the time and date (also referred to as a timestamp) of the most recent modification to the keychain item. In some embodiments, each keychain item also includes an attribute for specifying that the keychain item is a keychain item that has been deleted (also referred to as a tombstone). When the attribute specifies that the keychain item is a tombstone, the keychain manager maintains the date field of the keychain item, but the keychain manager sets the value of the keychain items' data <b>1030</b> to null or empty. In some embodiments, a keychain item that resulted from a resolution of conflicting keychain items includes a set of attributes that includes (1) a flag indicating that the keychain item is the result of a conflict resolution, (2) a version number of the conflict resolver used to resolve the conflict, and (3) the conflicting keychain items from which the keychain item was resolved (also referred to as the parent keychain items). The set of attributes is referred to as the keychain item's conflict resolution metadata in some embodiments.
0122In some embodiments, the attributes or a subset of the attributes of a keychain item is used as a primary key for uniquely identifying the keychain item. That is, two keychain items with the same primary key are considered the same keychain item (regardless of whether the values of the data of the keychain items are the same).
0123The access data <b>1035</b> is for controlling access to the keychain item <b>1020</b>. As illustrated, the access data <b>1035</b> includes access control list (ACL) entries <b>1</b>-K for controlling access to the keychain item <b>1020</b>. <figref idref="DRAWINGS">FIG. 10</figref> illustrates an ACL entry <b>1040</b> that represents the ACL entry <b>1</b> of the access data <b>1035</b>. The ACL entry <b>1040</b> includes authorization tags <b>1045</b> that specify operations (e.g., read, write, delete, decrypt, authenticate, etc.) that can be performed on the keychain item <b>1020</b>. In this example, the authorization tags <b>1045</b> includes authorization tags <b>1</b>-H.
0124Additionally, the ACL entry <b>1040</b> includes a list of trusted applications <b>1050</b>. As shown, the list of trusted application <b>1050</b> includes application ID <b>1</b>-J. Each application ID is a unique identifier for identifying a particular application that may perform the operations specified by the authorization tags <b>1045</b> without user authorization.
0125One of ordinary skill in the art will recognize that the keychain data structure <b>1050</b> is only one possible data structure that the keychain manager might use to store the required information for a keychain. For example, different embodiments might store additional or less information, store the information in a different order, etc.
0126B. Syncing Keychain Items
0127As explained above, the devices in a sync circle of some embodiment synchronize a keychain between the devices by synchronizing the individual keychain items of the keychain. <figref idref="DRAWINGS">FIG. 11</figref> conceptually illustrates a state diagram <b>1100</b> that describes different states and transitions between these states of the keychain manager of some embodiments. One of ordinary skill in the art will recognize that in some embodiments the keychain manager will have many different states relating to all different types of input events, and that the state diagram <b>1100</b> is specifically focused on a subset of these events. In particular, the state diagram <b>1100</b> describes the input events and related states for synchronization passwords with devices that are members of a sync circle. In describing <figref idref="DRAWINGS">FIG. 11</figref>, the device on which the keychain manager is running will be referred to as the local device.
0128When the keychain manager is not processing any events for syncing keychains, the keychain manager is in a steady state <b>1105</b>. In the state <b>1105</b>, the keychain manager may perform other operations that are not related to synching keychains. For instance, the keychain manager may perform registration operations to accept, deny, and/or acknowledge requests to join a sync circle.
0129Upon receiving a manifest digest from a peer device in the sync circle, the keychain manager transitions to state <b>1110</b> to process the manifest digest request. In some embodiments, a manifest digest is a list of the peer device's current keychain items. The keychain manager of some embodiments stores a history of manifests for each peer device in the sync circle.
0130At state <b>1110</b>, the keychain manager generates a response to the manifest digest by comparing the most recent manifest in the local device's history for the peer device with the manifest digest received from the peer device. If the manifests match and the local device has the same keychain items as the keychain items in the peer device's manifest digest, the keychain manager generates a message indicating that the local device is synchronized with the peer device.
0131If the most recent manifest in the local device's history for the peer device matches the manifest digest received from the peer device manifests, but the local device has a different set of keychain items compared to the keychain items in the peer device's manifest digest, the keychain manager generates a message that includes a delta manifest. In some embodiments, a delta manifest includes is (1) a list of differences between the local device's keychain items and keychain items listed in the peer device's manifest and (2) the data for the corresponding keychain items in the list. The delta manifest may include keychain items that are not included in the peer device's manifest digest and/or keychain items that are the same (e.g., have the same primary key), but have different data values.
0132When the most recent manifest in the local device's history for the peer device and the manifest digest received from the peer device do not match, the keychain manager generates a message that includes the local device's complete manifest. A complete manifest in some embodiments includes (1) a list of all of the local device's keychain items (2) the data for the corresponding keychain items in the list. Upon processing the manifest digest from the peer device, the keychain manager sends the generate response to the peer device and transitions back to the steady state <b>1005</b>.
0133While in the steady state <b>1105</b>, if the keychain manager receives a change to the local keychain, the keychain manager proceeds to state <b>1115</b> to process the change to the local keychain. At state <b>1115</b>, the keychain manager updates the local keychain with the change. In some embodiments, the keychain may include keychain items that are specified for syncing with peer devices in the sync circle and keychain items that are not for syncing with peer devices in the sync circle. If the change to the local keychain does not affect any keychain items that are specified for syncing with the peer devices in the sync circle, the keychain manager returns to the steady state <b>1105</b>. Otherwise, the keychain manager transitions to state <b>1120</b> to synchronize the keychain items that are (1) specified for syncing with the peer devices in the sync circle and (2) that are affected by the change to the local keychain.
0134At state <b>1120</b>, the keychain manager sends the update to the local device's keychain to each of the peer devices in the sync circle. In some embodiments, the keychain manager performs the process <b>1200</b> described below by reference to <figref idref="DRAWINGS">FIG. 12</figref> to send the updates to the peer devices. After the keychain manager sends the updates to the peer devices, the keychain manager returns to the steady state <b>1105</b>.
0135When the keychain manager is in the steady state <b>1105</b> and receives a complete manifest from a peer device in the sync circle, the keychain manager transitions to state <b>1125</b> to process the complete manifest. In some embodiments, the keychain manager process the complete manifest by generating a delta manifest the includes (1) a list of differences between the local device's keychain items and keychain items listed in the peer device's complete manifest and (2) the data for the corresponding keychain items in the list. If the delta manifest is empty (i.e., the local device has the same keychain items as the keychain items listed in the peer device's complete manifest), the keychain manager send a message to the peer device indicating so and then returns to the steady state <b>1105</b>. If the delta manifest is not empty, the keychain manager sends the delta manifest to the peer device and then returns to the steady state <b>1105</b>.
0136At the steady state <b>1105</b>, if the keychain manager receives a delta manifest from a peer device for updating the local device's keychain, the keychain manager transitions to state <b>1135</b> to apply the updates from the peer device to the local device's keychain. In some embodiments, the keychain manager performs the process <b>1300</b> described below by reference to <figref idref="DRAWINGS">FIG. 13</figref> to apply the updates from the peer device to the local device's keychain. Once the keychain manager applies the peer device's updates to the local keychain, the keychain manager applies the peer device's updates to the most recent manifest in the local device's history for the peer device stores the modified manifest in the local device's history for the peer device's manifests. The keychain manager then compares the most recent manifest in the local device's history for the peer device, which is the manifest that the keychain manager just stored, to the local device's current manifest of keychain items.
0137If the manifests match, but the local device has a different set of keychain items compared to the keychain items in the peer device's manifest digest, the keychain manager transitions to state <b>1140</b> and schedules updates to send to the peer devices in the sync circle. Otherwise, the keychain manager returns to the steady state <b>1105</b>.
0138In state <b>1140</b>, the keychain manager checks whether any updates from peer devices are left to process. If so, the keychain manager transitions to state <b>1135</b> to continue processing any delta manifests from peer devices for updating the local keychain. If there are no updates from peer devices to process, the keychain manager transitions from state <b>1140</b> to state <b>1145</b> to send the scheduled updates to the peer devices in the sync circle. In some embodiments, the keychain manager performs the process <b>1200</b> described below by reference to <figref idref="DRAWINGS">FIG. 12</figref> to send the updates to the peer devices. Once the keychain manager sends all the scheduled updates to the peer devices, the keychain manager returns to the steady state <b>1105</b>.
0139<figref idref="DRAWINGS">FIG. 12</figref> conceptually illustrates a process <b>1200</b> of some embodiments for pushing updates to peer devices. In some embodiments, the keychain manager described in this application performs the process <b>1200</b> to send updates that were applied to the local keychain of the local device to the peer devices in the sync circle. For instance, the keychain manager performs the process <b>1200</b> when the keychain manager is in states <b>1120</b> and <b>1145</b> described above by reference to <figref idref="DRAWINGS">FIG. 11</figref>.
0140The process <b>1200</b> starts by identifying (at <b>1210</b>) a peer device in the sync circle. In some embodiments, the process <b>1200</b> identifies a peer device by accessing a local copy of the sync device list while, in other embodiments, the process <b>1200</b> identifies a peer device by accessing the sync device list stored in the cloud services <b>305</b> (e.g., in storage <b>310</b>).
0141Next, the process <b>1200</b> determines (at <b>1220</b>) whether the manifest of the local device matches the manifest of the peer device. In some embodiments, the process <b>1200</b> uses the most recent manifest in the local device's history for the peer device as the manifest of the peer device. When the process <b>1200</b> determines that the manifests match, the process <b>1200</b> proceeds to <b>1260</b>. Otherwise, the process <b>1200</b> continues to <b>1230</b>.
0142At <b>1230</b>, the process <b>1200</b> generates a delta manifest based on the manifests of the local device and the peer device. As described above, a delta manifest in some embodiments includes is (1) a list of differences between the local device's keychain items and keychain items listed in the peer device's manifest and (2) the data for the corresponding keychain items in the list. In some embodiments, the process <b>1200</b> generates the delta manifest by (1) comparing to keychain items in the local device's keychain against the keychain items listed n the peer device's manifest and (2) identifying the differences.
0143The process <b>1200</b> then encrypts (at <b>1240</b>) a copy of the local keychain items that are specified in the delta manifest using the encryption key or set of keys for the peer device. As explained above, a secure communication channel is used in some embodiments between every pair of devices in the sync circle. As such, the process <b>1210</b> identifies the key or set of keys established for the secure communication channel used to communicate with the peer device and uses the identified key or set of keys to encrypt the copies of the local keychain items.
0144Next, the process <b>1200</b> sends (at <b>1250</b>) the encrypted keychain items and the delta manifest to the peer device through the secure communication channel. Once the process <b>1200</b> sends the information to the peer device, the process <b>1200</b> then determines (at <b>1260</b>) whether any peer device in the sync circle is left to process. When the process <b>1200</b> determines that there is a peer device left to process, the process <b>1200</b> returns to <b>1210</b> to continue sending updates that were applied to the local keychain to the remaining peer devices in the sync circle. When the process <b>1200</b> determines that there is no peer device left to process, the process <b>1200</b> then ends.
0145<figref idref="DRAWINGS">FIG. 13</figref> conceptually illustrates a process <b>1300</b> of some embodiments for processing updates from peer devices. In some embodiments, the keychain manager described in this application performs the process <b>1300</b> to apply updates from peer devices to the local keychain of the local device. For example, the keychain manager performs the process <b>1300</b> when the keychain manager is in state <b>1135</b> (e.g., when the keychain manager receives a delta manifest from a peer device to process) described above by reference to <figref idref="DRAWINGS">FIG. 11</figref>.
0146The process <b>1300</b> begins by identifying (at <b>1310</b>) an updated keychain item specified in the delta manifest received from a peer device. Next, the process <b>1300</b> decrypts (at <b>1320</b>) the updated keychain item. As noted above, a secure communication channel is used in some embodiments between every pair of devices in the sync circle. Therefore, the process <b>1310</b> identifies the key or set of keys established for the secure communication channel used to communicate with the peer device and uses the identified key or set of keys to decrypt the updated keychain item.
0147The process <b>1300</b> then identifies (at <b>1330</b>) the primary key of the updated keychain item. As explained above, in some embodiments, the attributes or a subset of the attributes of a keychain item is used as a primary key for uniquely identifying the keychain item.
0148Next, the process <b>1320</b> determines (at <b>1340</b>) whether a keychain item in the local keychain has a primary key that is the same as the primary key of the updated keychain item. When the process <b>1300</b> determines that no keychain item in the local keychain has a primary key that is the same as the primary key of the updated keychain item, the process <b>1300</b> applies (at <b>1350</b>) the updated keychain item to the local keychain. In some embodiments, the process <b>1300</b> applies the updated keychain item to the local keychain by adding the updated keychain to the local keychain.
0149When the process <b>1300</b> determines that a keychain item in the local keychain has a primary key that is the same as the primary key of the updated keychain item, the process <b>1300</b> resolves (at <b>1360</b>) the conflict between the updated keychain item and the local keychain item and applies the result of the conflict resolution to the local keychain. The process <b>1300</b> of different embodiments resolve conflicts between conflicting keychain items differently. One such approach is described below by reference to <figref idref="DRAWINGS">FIG. 15</figref>.
0150C. Resolving Keychain Item Conflicts
0151When syncing keychain items, the keychain manager of some embodiments might detect conflicts between multiple versions of the same keychain item. In different embodiments, the keychain manager resolves keychain item conflicts using different techniques. For example, in some embodiments, the method uses the most recent version of the keychain item as the keychain item to be synced between the devices. Additional and/or different approaches may be used in some embodiments.
0152In some embodiments, the devices may update their conflict resolving processes (also referred to as “conflict resolvers”). The updated process and the earlier, non-updated process in some instances provide different results when determining which keychain item values should be used. In some embodiments, it is possible for one or more devices in a sync circle to be using an updated conflict resolution process while one or more other devices in the same sync circle are using a previous version of the conflict resolution process. <figref idref="DRAWINGS">FIG. 14</figref> conceptually illustrates a process <b>1400</b> of some embodiments for resolving conflicting conflict resolvers. In some embodiments, the process <b>1300</b> described above by reference to <figref idref="DRAWINGS">FIG. 13</figref> performs the process <b>1400</b> to implement operation <b>1360</b>.
0153The process <b>1400</b> starts by identifying (at <b>1410</b>) the conflict resolution metadata of the conflicting keychain items. As noted above, the conflict resolution metadata of some embodiments includes (1) a flag indicating that the keychain item is the result of a conflict resolution, (2) a version number of the conflict resolver used to resolve the conflict, and (3) the conflicting keychain items from which the keychain item was resolved (also referred to as the parent keychain items).
0154Next, the process <b>1400</b> determines (at <b>1420</b>) whether the conflict resolver of the updated keychain item and the conflict resolver of the local keychain item conflict. In some embodiments, the conflict resolvers of the updated keychain item and the local keychain item conflict when (1) both of the keychain items includes a flag that indicates that the keychain item was the result of a conflict resolution, (2) the updated keychain item and the local keychain item are specified as the parent keychain items of the updated keychain item, and (3) the version number of the conflict resolver used to resolve the updated keychain item is not the same as the version number of the local device's conflict resolver.
0155When the process <b>1400</b> determines that the conflict resolvers do not conflict, the process <b>1400</b> resolves (at <b>1430</b>) the keychain item conflict with the conflict resolver of the local device and then the process <b>1400</b> ends. When the process <b>1400</b> determines that the conflict resolvers conflict, the process <b>1400</b> determines (at <b>1450</b>) whether to use the conflict resolver of the local device. When the version number of the local conflict resolver is greater than the version number of the conflict resolver used to resolve the updated keychain item, the process <b>1400</b> resolves (at <b>1430</b>) the keychain item conflict with the conflict resolver of the local device. Otherwise, the process <b>1400</b> uses (at <b>1430</b>) the updated keychain item as the resolution to the keychain item conflict. The process <b>1400</b> then ends.
0156<figref idref="DRAWINGS">FIG. 15</figref> conceptually illustrates a process <b>1500</b> of some embodiments for resolving keychain item conflicts. In some embodiments, the process <b>1400</b> described above by reference to <figref idref="DRAWINGS">FIG. 14</figref> performs the process <b>1500</b> to implement operation <b>1460</b>.
0157The process <b>1500</b> begins by identifying (at <b>1510</b>) the timestamps of the conflicting updated keychain item and local keychain item. As noted above, the data structure of a keychain item in some embodiments includes a date field that indicates the time and date of the most recent modification to the keychain item. In some embodiments, the process <b>1500</b> identifies the timestamps by accessing the date field attribute of each keychain item.
0158Next, the process <b>1500</b> determines (at <b>1520</b>) whether the updated keychain item's timestamp is more recent. When the process <b>1500</b> determines that the updated keychain item's timestamp is more recent, the process <b>1500</b> updates (at <b>1540</b>) the local keychain item with the updated keychain item and then the process <b>1500</b> ends. When the process <b>1500</b> determines that the updated keychain item's timestamp is not more recent, the process <b>1500</b> updates (at <b>1530</b>) the local keychain item with the local keychain item and then the process <b>1500</b> ends.
IV. Using Data Protection Domains for Keychains
0159Some embodiments of the invention provide a data protection feature for limiting access to keychain data (e.g., keychain items) on devices according to defined sets of conditions and/or requirements. In some embodiments, several different protection domains (also referred to as data protection classes) are defined and each keychain item on a device belongs to one of the defined protection domains. Each protection domain is associated with a set of conditions. When a set of conditions are met for a particular data protection domain, the keychain items in the device that belong to the particular protection domain becomes available for use by the device.
0160A. Data Protection Domains
0161<figref idref="DRAWINGS">FIG. 16</figref> conceptually illustrates different keychain items in different devices. Specifically, this figure illustrates that keychain items belonging to different protection domains become available according to the conditions that the devices meet for the different protection domains. This figure illustrates source devices <b>1605</b> and <b>1610</b>, destination devices <b>1615</b>-<b>1635</b>, and keychain items S<b>1</b>-S<b>3</b> and C<b>4</b>-C<b>5</b>.
0162In some embodiments, protection domains are pre-defined and provided to the devices as part of the operating systems (e.g., iOS™, Windows™, etc.) for the devices. The devices that are managed by these operating systems can utilize the protection domains to protect keychain items by making the keychain items in the devices available only after the conditions associated with the protection domains are met. These pre-defined protection domains are referred to as system protection domains in this patent application.
0163In some embodiments, protection domains may be custom-defined by the user of the devices or the developers of the applications that run on the devices. In these embodiments, the manufacturers of the devices or the operating systems provide a user with a tool so that the user can define custom-defined protection domains by defining different sets of conditions for the protection domains. Also, the manufacturers of the devices or the operating systems provide developers with software development kits (SDKs) so that the developer can define custom-defined protection domains by defining different sets of conditions for the protection domains for the applications that the developers write to run on the devices.
0164As mentioned above, different protection domains are associated with different sets of conditions or requirements. In some embodiments, protection domains may be defined to provide additional levels of security for certain keychain items. That is, a first protection domain's conditions are a subset of a second protection domain's conditions such that keychain items that belong to the second protection domain become available to the devices only if the devices meet the additional conditions of the second protection domain on top of the first protection domain's conditions. For instance, the first protection domain's conditions include a device being booted and running and the second protection domain's conditions include the device being unlocked as well as being booted and running.
0165In some embodiments, protection domains may be defined to have different sets of conditions that may or may not overlap. For instance, a first protection domain's conditions may include additional authentication (e.g., an additional password) after the devices are unlocked. A second protection domain's conditions may include a particular application's presence in the devices. These conditions of the first and second protections do not overlap.
0166The source device <b>1605</b> in this example is a device that pushes updated keychain items S<b>1</b>-S<b>3</b> to the destination devices <b>1615</b>-<b>1625</b>. As shown, keychain items S<b>1</b>-S<b>3</b> in the device <b>1605</b> belong to protection domains <b>1</b>-<b>3</b>, respectively. The protection domains <b>1</b>-<b>3</b> in this example are system protection domains. The protection domains <b>1</b>-<b>3</b> provide different levels of security to the keychain items. In this example, the protection domain <b>3</b>'s conditions are a subset of the protection domain <b>2</b>'s conditions, and the protection domain <b>2</b>'s conditions are a subset of the protection domain <b>1</b>'s conditions.
0167The devices <b>1615</b>-<b>1625</b> in this example meet different sets of conditions. Specifically, the device <b>1625</b> meets all conditions of the protection domain <b>3</b>. The device <b>1620</b> meets all conditions of the protection domain <b>2</b>. The device <b>1615</b> meets all conditions of the protection domain <b>1</b>. As a result, the keychain item S<b>3</b> is available for the device <b>1625</b>'s use but the keychain items S<b>1</b> and S<b>2</b> are not. The keychain items are illustrated as dotted parallelograms to indicate the items' unavailability. The keychain items S<b>2</b> and S<b>3</b> are available for the device <b>1620</b>'s use but the keychain items S<b>1</b> is not. All three of the keychain items S<b>1</b>-S<b>3</b> are available for the device <b>1615</b>'s use.
0168Different embodiments employ different ways of leaving keychain items unavailable for the devices' use. For instance, a keychain manager in a device of some embodiments does not decrypt a keychain item and thereby makes the keychain item unusable when the device does not meet all the conditions for the protection domain to which the keychain item belongs. Alternatively or conjunctively, the keychain manager of some embodiments makes a keychain item inaccessible by the applications running in the device until the device meets the conditions for the protection domain to which the keychain item belongs. In some embodiments, the keychain manager of the destination device does not accept a keychain item that is pushed from a source device unless, at the time the keychain is pushed, the destination device meets the conditions of the protection domain to which the keychain item belongs.
0169The source device <b>1610</b> in this example is a device that pushes updated keychain items C<b>4</b> and C<b>5</b> to the destination devices <b>1630</b>-<b>1635</b>. As shown, keychain items C<b>4</b> and C<b>5</b> in the device <b>1610</b> belong to protection domains <b>4</b> and <b>5</b>, respectively. The protection domains <b>4</b> and <b>5</b> are custom-defined protection domains, which have different sets of conditions. In this example, the protection domain <b>4</b>'s conditions do not overlap with the protection domain <b>5</b>'s conditions.
0170The devices <b>1630</b> in this example meets all conditions of the protection domain <b>4</b>, but not all the conditions of the protection domain <b>5</b> while the device <b>1635</b> meets all conditions of the protection domain <b>5</b> but not all the conditions of the protection domain <b>4</b>. As a result, the keychain item C<b>4</b> is available for the device <b>1630</b>'s use but the keychain item C<b>5</b> is not. The keychain item C<b>5</b> is available for the device <b>1635</b>'s use but the keychain item C<b>4</b> is not.
0171One of ordinary skill in the art will recognize that the use of the protection domains of some embodiments is not limited to protecting keychain items. Any type of data may be defined to belong to different protection domains in order to receive different levels of security. For instance, a document updated in a first device of some embodiments may be pushed to a second device but the document remains unavailable for the second device's use until the second device meets all the conditions of the protection domain to which the document belongs.
0172<figref idref="DRAWINGS">FIG. 17</figref> conceptually illustrates a process <b>1700</b> that some embodiments perform to process keychain items. In some embodiments, the process <b>1700</b> is performed by a destination device to which one or more source devices have pushed the keychain items. In particular, a keychain manager of the destination device may perform the process <b>1700</b> in these embodiments. The destination device of some embodiments deposits the keychain items from the source devices in a processing queue. An example processing queue will be described further below by reference to <figref idref="DRAWINGS">FIG. 18</figref>. The process <b>1700</b> in some embodiments starts when the destination device is booted and has received one or more keychain items from the source devices.
0173The process <b>1700</b> begins by retrieving (at <b>1710</b>) a keychain item from a processing queue. In some embodiments, the processing queue is a storage structure (e.g., a file system) for holding keychain items pushed from source devices. In some embodiments, source devices encrypt the data (e.g., a password) in the keychain item using a public key of the destination device that is previously published by the destination device. In these embodiments, the keychain items are stored in the processing queue as encrypted.
0174The destination device uses a corresponding private key (i.e., the private key of the public-private key pair that includes the public key that the source devices used to encrypt the keychain items) to decrypt the keychain items. In some embodiments, the destination device generates a public-private key pair for each of the protection domains that the device supports. More details about the key pairs for different protection domains will be described further below by reference to <figref idref="DRAWINGS">FIGS. 25 and 26</figref>.
0175The process <b>1700</b> then identifies (at <b>1720</b>) the protection domain of the retrieved keychain item. A keychain item in some embodiments also includes or is associated with an identifier for identifying a protection domain to which the keychain item belongs. In some embodiments, the public key that the source devices used to encrypt the data in the keychain item serves as the protection domain identifier. The process <b>1700</b> reads the protection domain identifier of the keychain item to identify the protection domain to which the retrieved keychain item belongs.
0176Next, the process <b>1700</b> determines (at <b>1730</b>) whether the identified protection domain is available. That is, the process <b>1700</b> determines whether the destination device have met all the conditions of the identified protection domain. In some embodiments, the destination device obtains the definitions of the conditions as part of the operating system for the device. Alternatively or conjunctively, the destination device of some embodiments may obtain the definitions of the conditions when the destination device and the source devices establish a sync circle that includes the destination and source devices.
0177When the process <b>1700</b> determines (at <b>1730</b>) that not all the conditions of the identified protection domain are met, the process <b>1700</b> returns (at <b>1740</b>) the keychain item back to the processing queue by depositing the keychain item back in the queue so that the keychain item can wait for the conditions of the protection domain to which this keychain item belongs to be met. The process <b>1700</b> then proceeds to <b>1760</b>, which will be described further below.
0178When the process <b>1700</b> determines (at <b>1730</b>) that all the conditions of the identified protection domain are met, the process <b>1700</b> processes (at <b>1750</b>) the keychain item. At <b>1750</b>, the process <b>1700</b> of some embodiments processes the keychain item by initiating syncing keychain items. In some embodiments, the process <b>1700</b> decrypts the keychain item using the private key of the destination device for the identified protection domain.
0179Next, the process <b>1700</b> determines (at <b>1760</b>) whether there are other keychain items in the processing queue that are yet to be processed. When the process <b>1700</b> determines that there are other keychain items in the processing queue, the process <b>1700</b> loops back to <b>1710</b> to retrieve another keychain item. Otherwise, the process <b>1700</b> ends.
0180<figref idref="DRAWINGS">FIG. 18</figref> conceptually illustrates a processing queue for depositing incoming keychain items. Specifically, this figure illustrates that the processing queue of some embodiments is a set of buckets associated with different protection domains. This figure illustrates a source device <b>1805</b>, a destination device <b>1810</b>, and a processing queue <b>1815</b>.
0181The source device <b>1805</b> updates one or more keychain items and pushes the keychain items to the destination device <b>1810</b>. In some embodiments, a keychain item <b>1840</b> that the source device <b>1805</b> sends is associated with a protection domain identifier <b>1835</b>, which the source device <b>1805</b> sends along the keychain item <b>1840</b>. In some embodiments, the source device <b>1805</b> encrypts the keychain item <b>1840</b> with a public key (not shown) of the destination device <b>1840</b>, which the destination device <b>1840</b> has previously published for each protection domain that the destination device <b>1840</b> supports. In some of these embodiments, the public key that is used to encrypt the keychain item may serve as the protection domain identifier.
0182The processing queue <b>1815</b> that the destination device <b>1810</b> uses to deposit the keychain items has buckets <b>1820</b>-<b>1830</b>. Each of the buckets is associated with a protection domain as shown. The destination device <b>1810</b> deposits a keychain item in one of the buckets <b>1820</b>-<b>1830</b> of the processing queue <b>1815</b> based on the protection domain identified by the protection domain identifier. In some embodiments, the destination device <b>1810</b> also deposits the protection domain identifier associated with each keychain item. In other embodiments, the destination device <b>1810</b> dissociates the identifiers from the keychain items as the destination device <b>1810</b> deposits the keychain items in the processing queue <b>1815</b>. As shown, the bucket <b>1820</b> has three keychain items <b>1845</b>-<b>1855</b>, the bucket <b>1820</b> has one keychain item <b>1860</b>, and the bucket <b>1830</b> has two keychain items <b>1865</b> and <b>1870</b> that the device <b>1810</b> has deposited without the protection domain identifiers.
0183In some embodiments, the keychain items are unavailable for the device <b>1810</b>'s use when the keychain items are in the processing queue <b>1815</b>. The keychain items are depicted as dotted ellipses to indicate the keychain items' unavailability to the device <b>1810</b>.
0184In some embodiments, the destination device <b>1810</b> associates the keychain item with a private key that is a counterpart private key of the public key that the source device <b>1805</b> use to sign the keychain item pushed to the destination device <b>1810</b>. The destination device <b>1810</b> deposits the private keys along with the keychain items in the processing queue and thereby makes the private keys unavailable for the device <b>1810</b>'s use.
0185In some embodiments, the destination device <b>1810</b> makes the private keys stored in the processing queue unavailable by encrypting the private keys using other keys associated with the protection domains. In these embodiments, the private keys stored in the processing queue can be decrypted with those other keys only when the device meets the conditions of the protection domains. The keychain items then can be decrypted with the decrypted private keys and thereby become available for the device's use. Those other keys that are used to encrypt the private keys are referred to as local domain protection keys in this patent application.
0186When the device <b>1810</b> meets all the conditions defined for a protection domain that is associated with a particular bucket, the destination device <b>1810</b> can take out the keychain items from the particular bucket by decrypting the private keys with the local domain protection keys and then decrypting the key chains with the decrypted private keys. The destination process <b>1810</b> then processes the decrypted keychain items. In some embodiments, the device <b>1810</b> initiates a syncing process to sync the received keychain items with the keychain items (not shown) that the device <b>1810</b> already had.
0187It is to be noted that when the destination device <b>1810</b> receives the keychain items from the source device <b>1805</b> while the destination device <b>1810</b> is meeting the conditions of the protection domains to which the keychain items belong, the destination device <b>1810</b> does not need to encrypt the private keys for the protection domains. The destination device <b>1810</b> thus can decrypt the keychain items with the private keys without depositing the keychain items in the processing queue <b>1815</b>.
0188<figref idref="DRAWINGS">FIG. 19</figref> conceptually illustrates a process <b>1900</b> that some embodiments perform to process keychain items received from a source device. In some embodiments, the source device pushes a group of keychain items in a single transaction (e.g., a single message) rather than pushing one keychain item per transaction. In some cases, the keychain items in a group are related in such a way that the keychain items are to be processed together by the destination device. In some embodiments, the process <b>1900</b> is performed by a destination device that receives keychain items in groups and processes the keychain items in a group together. In particular, a keychain manager of the destination device may perform the process <b>1900</b> in these embodiments. The destination device of some embodiments deposits the groups of keychain items from the source device in a processing queue. The process <b>1900</b> in some embodiments starts when the destination device is booted and has received one or more groups of keychain items from the source device.
0189The process <b>1900</b> begins by retrieving (at <b>1910</b>) a group of keychain items from a processing queue, which is a storage structure (e.g., a file system) for holding groups of keychain items pushed from the source device. In some embodiments, the source device encrypts the data in each keychain item in the group stored in the processing queue by using the public key of the destination device for the protection domain to which the keychain item belongs. The destination device uses corresponding private keys to decrypt the keychain items in the group. The process <b>1900</b> then identifies (at <b>1920</b>) the protection domain of each keychain item in the retrieved group of keychain items.
0190Next, the process <b>1900</b> determines (at <b>1930</b>) whether all of the identified protection domains for the retrieved group are available. That is, the process <b>1900</b> determines whether the destination device have met all the conditions of each of the identified protection domains. The process <b>1900</b> of some embodiments iteratively goes through each of the identified protection domains of the group.
0191When the process <b>1900</b> determines (at <b>1930</b>) that not all the conditions of the protection domain for any of the identified protection domains met, the process <b>1900</b> returns (at <b>1940</b>) the group of keychain items back to the processing queue by depositing the group of keychain items back in the queue. The process <b>1900</b> then proceeds to <b>1960</b>, which will be described further below.
0192When the process <b>1900</b> determines (at <b>1930</b>) that all the conditions of every identified protection domains are met, the process <b>1900</b> processes (at <b>1950</b>) the group of keychain items. At <b>1950</b>, the process <b>1900</b> of some embodiments processes the keychain items by initiating a syncing process. In some embodiments, the process <b>1900</b> decrypts the keychain items using the private keys of the destination device for the identified protection domains.
0193Next, the process <b>1900</b> determines (at <b>1960</b>) whether there are other groups of keychain items in the processing queue that are yet to be processed. When the process <b>1900</b> determines that there are other groups of keychain items in the processing queue, the process <b>1900</b> loops back to <b>1910</b> to retrieve another group of keychain items. Otherwise, the process <b>1900</b> ends.
0194B. Use Cases
0195<figref idref="DRAWINGS">FIG. 20</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked in order for the keychain items belonging to the protection domain to be available at the device. Specifically, this figure illustrates in six different stages <b>2001</b>-<b>2006</b> processing a keychain item <b>2020</b> that is updated by a source device <b>2010</b> and pushed to the destination device <b>2015</b>. This figure also illustrates processing a keychain item <b>2025</b> that is a corresponding keychain item to be synced with the keychain item <b>2020</b>.
0196The protection domain to which the keychain items <b>2020</b> and <b>2025</b> belong requires the destination device <b>2015</b> to be unlocked in order to make the keychain items <b>2020</b> and <b>2025</b> available at the destination device <b>2015</b>. In this patent application, a device being “unlocked” may not mean that the screen of the device is unlocked for taking any inputs to the screen. Rather, a device being unlocked means that a user has authenticated to use the device. The device of different embodiments provides different authentication mechanism. For instance, the device of some embodiments requires the user to provide a passcode (e.g., a four-digit passcode) to unlock the device. Other embodiments may alternatively or conjunctively allow the user to unlock the device with a lengthy password, a retina scan, a fingerprint scan, voice recognition, etc.
0197The first stage <b>2001</b> shows that the keychain items <b>2020</b> and <b>2025</b> in the source and destination devices <b>2010</b> and <b>2015</b>, respectively, are in sync. At this stage, the destination device <b>2015</b> is in a locked state. The destination device <b>2015</b> is in the locked state because the device <b>2015</b> has not been unlocked by the user of the device <b>2015</b> yet since the device is being booted or because the device <b>2015</b> automatically went from an unlocked state to the locked state after a period of idle time has passed. As shown, the keychain items <b>2020</b> and <b>2025</b> both include data <b>1</b>, but the keychain item <b>2025</b> at the destination device <b>2015</b> is depicted as a dotted parallelogram to indicate that the keychain item <b>2025</b> is unavailable because the destination device <b>2015</b> is in the locked state. In this example, the destination <b>2015</b> makes the keychain item <b>2025</b> unavailable by encrypting the keychain item <b>2025</b> with a local protection domain key for the protection domain to which the keychain item <b>2025</b> belongs.
0198The second stage <b>2002</b> shows that the keychain item <b>2020</b> at the source device <b>2010</b> has been updated from data <b>1</b> to data <b>2</b>. For instance, the keychain item <b>2020</b> includes the password to access a remote server that an application running in the source device <b>2010</b> requires, and the user of the source device <b>2010</b> has changed the password. At this stage, the keychain item <b>2025</b> remains unavailable at the destination device <b>2025</b> because the destination device <b>2015</b> is still in the locked state.
0199The next stage <b>2003</b> shows that the source device <b>2010</b> has pushed the keychain item <b>2020</b> to the destination device <b>2015</b> in order to sync the keychain item <b>2020</b> and the corresponding keychain item <b>2025</b> of the destination device <b>2015</b>. In this example, the source device <b>2010</b> encrypts the keychain item <b>2020</b> with a public key of the destination device <b>2015</b> for the protection domain before pushing the keychain item <b>2020</b> to the destination device <b>2015</b>. The destination device <b>2015</b> receives the keychain item <b>2020</b> but the keychain item <b>2020</b> is unavailable at this stage because the destination device is in the locked state and thus has not decrypted the keychain item <b>2020</b> with the corresponding private key for the protection domain. The private key also has been unavailable in this example because the destination device <b>2015</b> has encrypted the private key with the local protection domain key that is used to encrypt the keychain item <b>2025</b>. The keychain item <b>2025</b> remains unavailable at the destination device <b>2015</b> because the destination device <b>2015</b> is in the locked state and thus has not decrypted the keychain item <b>2025</b> with the local protection domain key.
0200At the fourth stage <b>2004</b>, the user has unlocked the destination device <b>2015</b>. As a result, both of the keychain items <b>2020</b> and <b>2025</b> become available for the destination device <b>2015</b>'s use. That is, the device <b>2015</b> at this stage decrypts the private key with the local protection domain key and then decrypts the keychain item <b>2020</b> with the decrypted private key. The device <b>2015</b> also decrypts the keychain item <b>2025</b> with the local protection domain key. The destination device <b>2015</b> then initiates syncing the two keychain items <b>2020</b> and <b>2025</b> because they became available.
0201The fifth stage <b>2005</b> shows that the keychain items <b>2020</b> and <b>2025</b> are synced and thus the keychain item <b>2025</b> has data <b>2</b>. The destination device <b>2015</b> is in the unlocked state and the keychain item <b>2025</b> is available for the destination device <b>2015</b>'s use. The next stage <b>2006</b> shows that the destination device <b>2015</b> has gone back to the locked state (e.g., by being idle for a period of time or because the user has locked the device <b>2015</b>). The destination device <b>2015</b> makes the keychain item <b>2025</b> unavailable by encrypting the keychain item <b>2025</b> with the local protection domain key.
0202<figref idref="DRAWINGS">FIG. 21</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked at least once after being booted in order for the keychain items belonging to the protection domain to be available at the device. Specifically, this figure illustrates in six different stages <b>2101</b>-<b>2106</b> processing keychain items <b>2120</b> and <b>2125</b> by a destination device <b>2115</b>. This figure also illustrates a source device <b>2110</b> that updates the keychain item <b>2120</b> and pushes it to the destination device <b>2115</b> for syncing with the keychain item <b>2125</b>.
0203The protection domain to which the keychain items <b>2120</b> and <b>2125</b> belong requires the destination device <b>2115</b> to be unlocked at least once after being booted (i.e., being turned on from a turned-off state) in order to make the keychain items <b>2120</b> and <b>2125</b> available at the destination device <b>2115</b>. In some embodiments, this protection domain is used to protect passwords to applications that run in the background. For instance, an email application running on a device needs a password to access the mail server in order to fetch emails while the device is idle (e.g., while the device is not receiving any user inputs).
0204The first stage <b>2101</b> shows that the keychain items <b>2120</b> and <b>2125</b> in the source and destination devices <b>2110</b> and <b>2115</b>, respectively, are in sync. As shown, both keychain items <b>2120</b> and <b>2125</b> include data <b>1</b>. At this stage, the destination device <b>2115</b> still has not been unlocked since the destination device <b>2115</b> is booted. That is, the user of the destination device <b>2115</b> has not unlocked the device <b>2115</b> yet after booting up the device <b>2115</b>. The keychain item <b>2125</b> at the destination device <b>2115</b> is depicted as a dotted parallelogram to indicate that the keychain item <b>2125</b> is unavailable. In this example, the destination <b>2125</b> has encrypted the keychain item <b>2125</b> with a local protection domain key for the protection domain to which the keychain item <b>2125</b> belongs, in order to make the keychain item <b>2125</b> unavailable.
0205The second stage <b>2102</b> shows that the keychain item <b>2120</b> at the source device <b>2110</b> has been updated from data <b>1</b> to data <b>2</b>. At this stage, the keychain item <b>2125</b> at the destination device <b>2115</b> remains unavailable because the destination device <b>2115</b> still has not been unlocked since being booted up.
0206The next stage <b>2103</b> shows that the source device <b>2110</b> has pushed the keychain item <b>2120</b> to the destination device <b>2115</b> in order to sync the keychain items <b>2120</b> and the corresponding keychain item <b>2125</b> of the destination device <b>2115</b>. In this example, the source device <b>2110</b> encrypts the keychain item <b>2120</b> with a public key of the destination device <b>2115</b> for the protection domain before pushing the keychain item <b>2120</b> to the destination device <b>2115</b>. The destination device <b>2115</b> receives the keychain item <b>2120</b> but the keychain item <b>2120</b> is unavailable at this stage because the destination device <b>2115</b> has not been unlocked since being booted up and thus has not decrypted the keychain item <b>2120</b> with the corresponding private key for the protection domain. The private key also has been unavailable in this example because the destination device <b>2115</b> has encrypted the private key with the local protection domain key that is used to encrypt the keychain item <b>2125</b>. The keychain item <b>2125</b> remains unavailable at the destination device <b>2115</b> because the destination device <b>2115</b> is in the locked state and thus has not decrypted the keychain item <b>2125</b> with the local protection domain key.
0207At the fourth stage <b>2104</b>, the user has unlocked the destination device <b>2115</b> for the first time after the device <b>2115</b> has been booted up. As a result, both of the keychain items <b>2120</b> and <b>2125</b> are available for the destination device <b>2115</b>'s use. In this example, the destination device <b>2115</b> makes the keychain item <b>2120</b> available by decrypting the keychain item <b>2120</b> with the private key for the protection domain. The destination device <b>2115</b> has decrypted the private key as well as the keychain item <b>2125</b> with the local protection domain key for the protection domain. The destination device <b>2115</b> initiates syncing the two keychain items <b>2120</b> and <b>2125</b> because they became available.
0208The fifth stage <b>2105</b> shows that the keychain items <b>2120</b> and <b>2125</b> are synced and thus the keychain item <b>2125</b> has data <b>2</b>. The destination device <b>2115</b> is in the unlocked state and the keychain item <b>2125</b> is available for the destination device <b>2115</b>'s use. At this stage, the user of the source device <b>2110</b> updates the keychain item <b>2120</b> again, from data <b>2</b> to data <b>3</b>.
0209The sixth stage <b>2106</b> shows that the destination device <b>2115</b> has gone back to the locked state (e.g., by being idle for a period of time or because the user has locked the destination device <b>2115</b>). However, the keychain item <b>2125</b> is still available for the device <b>2115</b>'s use because the device <b>2115</b> has been unlocked once after the device <b>2115</b> was booted up and thus the device <b>2115</b> does not again encrypt the keychain item <b>2125</b> with the local protection domain key.
0210At this stage <b>2106</b>, the source device <b>2110</b> has also pushed the keychain item <b>2120</b> to the destination device <b>2115</b> in order to sync the keychain items <b>2120</b> and the corresponding keychain item <b>2125</b> of the destination device <b>2115</b>. The source device <b>2110</b> uses the public key for the protection domain to encrypt the keychain item <b>2120</b> before pushing the keychain item <b>2120</b> to the destination device <b>2115</b>. The destination device <b>2115</b> receives the keychain item <b>2120</b> and the keychain items <b>2120</b> becomes available even if the destination device <b>2115</b> is in the locked state. This is because the destination device <b>2115</b> has been unlocked at least once after the device <b>2115</b> was booted up and thus the device <b>2115</b> does not encrypt the private key, which is then available to decrypt the keychain items <b>2120</b>. The keychain items <b>2120</b> will be synced even if the destination device <b>2115</b> remains in the locked state.
0211<figref idref="DRAWINGS">FIG. 22</figref> illustrates keychain items secured by a protection domain that requires a device to be turned on in order for the keychain items belonging to the protection domain to be available at the device. Specifically, this figure illustrates in four different stages <b>2201</b>-<b>2204</b> processing keychain items <b>2220</b> and <b>2225</b> by a destination device <b>2215</b>. This figure also illustrates a source device <b>2210</b> that updates the keychain item <b>2220</b> and pushes it to the destination device <b>2215</b> for syncing with the keychain item <b>2225</b>.
0212The protection domain to which the keychain items <b>2220</b> and <b>2225</b> belong requires the destination device <b>2215</b> to be on in order to make the keychain items <b>2220</b> and <b>2225</b> available for the device <b>2215</b>'s use. That is, as long as the destination device <b>2215</b> is up and running, the keychain items <b>2220</b> and <b>2225</b> are available for the device <b>2215</b>'s use all the time. Because this protection domain provides little protection, the device of some embodiments uses this protection domain for those applications that needs to be running all the time. An example of such applications include Find My iPhone™ application by Apple, Inc.
0213The first stage <b>2201</b> shows that the keychain items <b>2220</b> and <b>2225</b> in the source and destination devices <b>2210</b> and <b>2215</b>, respectively, are in sync. As shown, both keychain items <b>2220</b> and <b>2225</b> include data <b>1</b>. At this stage, the destination device <b>2215</b> is turned off.
0214The second stage <b>2202</b> shows that the keychain item <b>2220</b> at the source device <b>2210</b> has been updated from data <b>1</b> to data <b>2</b>. At this stage, the destination device <b>2215</b> is booted up but has not been unlocked yet. However, the keychain item <b>2225</b> is available for the destination device <b>2215</b>'s use because the condition (i.e., the device being up and running) of the protection domain has been met and thus the device <b>2215</b> does not encrypt the keychain item <b>2225</b> with a local protection domain key for the protection domain. In some embodiments, the keychain item <b>2225</b> may still be encrypted with a key tied to the device <b>2215</b> (e.g., a key derived from the UID of the device <b>2215</b>) but the keychain item <b>2215</b> is deemed available because the key is available to decrypt the keychain item <b>2225</b> at the device <b>2215</b>.
0215The next stage <b>2203</b> shows that the source device <b>2210</b> has pushed the keychain item <b>2220</b> to the destination device <b>2215</b> in order to sync the keychain items <b>2220</b> and the corresponding keychain item <b>2225</b> of the destination device <b>2215</b>. The source device <b>2210</b> encrypts the keychain item <b>2220</b> before pushing the keychain item <b>2220</b> to the destination device <b>2215</b>. The destination device <b>2215</b> receives the keychain item <b>2220</b> and the keychain item <b>2220</b> becomes available at the device <b>2215</b> at this stage even though the device <b>2215</b> has not been unlocked yet. This is because the device <b>2215</b> is up and running and thus the corresponding private key is available to decrypt the keychain item <b>2220</b>. The destination device <b>2215</b> initiates syncing the two keychain items <b>2220</b> and <b>2225</b> because the keychain items <b>2220</b> and <b>2225</b> are available.
0216At the fourth stage <b>2204</b>, the destination device <b>2215</b> has not been unlocked yet. However, the fourth stage <b>2204</b> shows that the keychain items <b>2220</b> and <b>2225</b> are synced. As a result, the keychain item <b>2225</b> now has data <b>2</b>.
0217<figref idref="DRAWINGS">FIG. 23</figref> illustrates keychain items secured by a protection domain that requires a device to be unlocked and also requires additional authentication in order for the keychain items belonging to the protection domain to be available at the device. Specifically, this figure illustrates in six different stages <b>2301</b>-<b>2306</b> processing a keychain item <b>2320</b> that is updated by a source device <b>2310</b> and pushed to the destination device <b>2315</b>. This figure also illustrates processing a keychain item <b>2325</b> that is a corresponding keychain item to be synced with the keychain item <b>2320</b>.
0218The protection domain to which the keychain items <b>2320</b> and <b>2325</b> belong requires the destination device <b>2315</b> to be unlocked and also requires additional authentication (e.g., a password, a retina scan, a fingerprint scan, voice recognition, the device being within vicinity of a certain location, etc.) in order to make the keychain items <b>2320</b> and <b>2325</b> available at the destination device <b>2315</b>. In some embodiments, this protection domain is used for protecting passwords to applications that need additional security measure. For instance, the keychain manager of some embodiments generates a secure random password for an application to access a remote server. In some embodiments, this password is not exposed to the user, and the keychain manager authenticates the user with a simpler or different password that the user can remember and use. The unexposed password is synced between the devices that the user uses. When the unexposed password is changed at a source device and is pushed to a destination device, the unexposed password does not become available at the destination device even if the user unlocks the destination device, unless the user provides the different password to use the same application running at the destination device.
0219The first stage <b>2301</b> shows that the keychain items <b>2320</b> and <b>2325</b> in the source and destination devices <b>2310</b> and <b>2315</b>, respectively, are in sync. At this stage, the destination device <b>2315</b> is in an unlocked state. As shown, the keychain items <b>2320</b> and <b>2325</b> both include data <b>1</b>, but the keychain item <b>2325</b> at the destination device <b>2315</b> is unavailable because the destination device <b>2315</b> is in the locked state. In this example, the destination <b>2325</b> has encrypted the keychain item <b>2325</b> with a local protection domain key for the protection domain to which the keychain item <b>2325</b> belongs, in order to make the keychain item <b>2325</b> unavailable.
0220The second stage <b>2302</b> shows that the keychain item <b>2320</b> at the source device <b>2310</b> has been updated by the user from data <b>1</b> to data <b>2</b>. For instance, the keychain item <b>2320</b> includes the unexposed password that is actually used to access the remote server that an application running in the source device <b>2310</b> requires, and the user has just changed the unexposed password by changing the different password that the user remembers and uses to authenticate to use an application. At this stage, the keychain item <b>2325</b> remains unavailable because the destination device <b>2315</b> is still in the locked state and thus the conditions for the protection domain have not been met yet.
0221The third stage <b>2303</b> shows that the source device <b>2310</b> has pushed the keychain item <b>2320</b> to the destination device <b>2315</b> in order to sync the keychain items <b>2320</b> and the corresponding keychain item <b>2325</b> of the destination device <b>2315</b>. In this example, the source device <b>2310</b> encrypts the keychain item <b>2320</b> with a public key of the destination device <b>2315</b> for the protection domain before pushing the keychain item <b>2320</b> to the destination device <b>2315</b>. The destination device <b>2315</b> receives the keychain item <b>2320</b> but the keychain item <b>2320</b> is unavailable at this stage because the destination device is in the locked state and thus has not decrypted the keychain item <b>2320</b> with the corresponding private key for the protection domain. The keychain item <b>2325</b> also remains unavailable because the destination device <b>2315</b> is in the locked state.
0222At the fourth stage <b>2304</b>, the user has unlocked the destination device <b>2315</b>. However, both of the keychain items <b>2320</b> and <b>2325</b> are still unavailable for the destination device <b>2315</b>'s use because the conditions for the protection domain to which the keychain items <b>2320</b> and <b>2325</b> belong have not been met yet—the user has not provided the additional authentication that this protection domain requires.
0223The fifth stage <b>2305</b> shows that the user has provided the additional authentication (e.g., by typing in the different password that the user remembers). Both of the keychain items <b>2320</b> and <b>2325</b> have become available now. This is because all conditions for the protection domain have been met and thus the device <b>2315</b> has decrypted the private key and the keychain item <b>2325</b> with the local protection domain. The device <b>2315</b> had decrypted the keychain item <b>2325</b> with the decrypted private key. The destination device <b>2315</b> initiates syncing the two keychain items <b>2320</b> and <b>2325</b>. The sixth stage <b>2306</b> shows that the keychain items <b>2320</b> and <b>2325</b> are synced and thus the keychain item <b>2325</b> has data <b>2</b>.
0224<figref idref="DRAWINGS">FIG. 24</figref> illustrates data secured by two protection domains having different sets of conditions for a device. Specifically, this figure illustrates in four different stages <b>2401</b>-<b>2404</b> processing metadata items <b>2430</b> and <b>2435</b> and keychain items <b>2420</b> and <b>2425</b> by a destination device <b>2415</b>. This figure also illustrates a source device <b>2410</b> that updates the keychain item <b>2420</b> and pushes it to the destination device <b>2415</b> for syncing with the keychain item <b>2425</b>.
0225As mentioned above, a keychain item is associated with a metadata item that carries information for the devices to use to resolve any conflict when syncing two keychain items. In some embodiments, a keychain item and its associated metadata item are defined to be in different protection domains so that the metadata item becomes available at a device while the keychain item remains unavailable. When the keychain item is unavailable and the associated metadata item is available at a device, the device can resolve any conflict for the keychain item using the information carried by the associated metadata item.
0226The metadata items <b>2430</b> and <b>2435</b> are associated with the keychain items <b>2420</b> and <b>2425</b>, respectively. In this example, the metadata items <b>2430</b> and <b>2435</b> belong to a first protection domain, which requires that the destination device <b>2415</b> be turned on in order for the metadata items <b>2430</b> and <b>2435</b> to be available for the device <b>2415</b>'s use. The keychain items <b>2420</b> and <b>2425</b> belong to a second protection domain, which requires that the destination device <b>2415</b> be in the unlocked state in order for the keychain items to be available at the destination device <b>2415</b>.
0227The first stage <b>2401</b> shows that the keychain items <b>2420</b> and <b>2425</b> in the source and destination devices <b>2410</b> and <b>2415</b>, respectively, are not in sync. As shown, keychain items <b>2420</b> and <b>2425</b> include data <b>1</b> and data <b>2</b>, respectively. The metadata items <b>2430</b> and <b>2435</b> have different information. The metadata item <b>2430</b> carries metadata <b>1</b> and the metadata item <b>2435</b> carries metadata <b>2</b>, as shown. At this stage, the destination device <b>2415</b> is in the locked state. The keychain item <b>2425</b> at the destination device <b>2415</b> is depicted as a dotted parallelogram to indicate that the keychain item <b>2425</b> is unavailable at the device <b>2415</b>. In this example, the device <b>2425</b> has made the keychain item <b>2425</b> unavailable by encrypting the keychain item <b>2425</b> with a local protection domain key for the second protection domain. The metadata item <b>2435</b> is available at the device <b>2415</b> because the device <b>2425</b> does not encrypt the metadata <b>2435</b> when the device <b>2425</b> is on.
0228The second stage <b>2402</b> shows that the source device <b>2410</b> has pushed the keychain item <b>2420</b> along with the associated metadata item <b>2430</b> to the destination device <b>2415</b> in order to sync the keychain items <b>2420</b> and the corresponding keychain item <b>2425</b> of the destination device <b>2415</b>. In this example, the source device <b>2410</b> encrypts the metadata item <b>2430</b> with a public key of the destination device <b>2415</b> for the first protection domain. The source device <b>2410</b> also encrypts the keychain item <b>2420</b> with a public key of the destination device <b>2415</b> for the second protection domain before sending the metadata item <b>2430</b> and the keychain item <b>2420</b> to the destination device <b>2415</b>.
0229The destination device <b>2415</b> receives the keychain item <b>2420</b> and the metadata item <b>2435</b> but the keychain item <b>2420</b> is unavailable at the destination device <b>2415</b> at this stage <b>2402</b>. This is because the destination device <b>2415</b> is still in the locked state and thus the device <b>2415</b> does not decrypt the keychain item <b>2425</b> with the private key for the second protection domain. The keychain item <b>2425</b> remains unavailable because the device <b>2415</b> is still in the unlocked state. The metadata item <b>2435</b> is available at the destination <b>2415</b> at this stage <b>2402</b> because the device <b>2402</b> is up and running. The device <b>2415</b> initiates syncing the two encrypted keychain items <b>2420</b> and <b>2425</b> by resolving the conflict between the keychain items <b>2420</b> and <b>2425</b> using the metadata items <b>2430</b> and <b>2435</b>.
0230At the third stage <b>2403</b>, the destination device <b>2415</b> is still in the locked state. However, the destination device <b>2415</b> has synced the keychain items. As a result, the metadata item has been updated with new conflict resolution information (metadata <b>3</b>) and the keychain item <b>2425</b> has data <b>1</b>. The updated keychain item <b>2425</b> is still not available at the destination device <b>2415</b> by remaining encrypted with the public key for the second domain because the device <b>2415</b> is still in the locked state. At the fourth stage <b>2404</b>, the destination device <b>2415</b> is in the unlocked state. In this example, the device makes keychain item <b>2425</b> available by decrypting the private key for the second protection domain with the local protection domain key for the second domain and then decrypting the keychain item <b>2425</b> with the decrypted private key.
0231C. Sync Circles and Protection Domains
0232As mentioned above, a device may join several different sync circles for syncing different keychain items (e.g., using the techniques described above by reference to <figref idref="DRAWINGS">FIGS. 4-6</figref>). In some embodiments, several devices form several different sync circles in order to sync keychain items that belong to several different protection domains.
0233<figref idref="DRAWINGS">FIG. 25</figref> conceptually illustrates several sync circles formed by several devices. Specifically, this figure illustrates that three devices A-C form three different sync circles <b>2505</b>-<b>2515</b> for three different protection domains <b>1</b>-<b>3</b>. The top portion of the figure illustrates the devices A-C in three sync circles <b>2505</b>-<b>2515</b>. The bottom portion of the figure illustrates the three sync circles <b>2505</b>-<b>2515</b> separately.
0234In some embodiments, a group of devices forms a sync circle for each of the protection domains that the devices use to protect keychain items. In some such embodiments, each device of the group uses the same public/private key pair that the device uses to encrypt and decrypt the keychain items, to join the sync circle. Alternatively or conjunctively, the devices of other embodiments use separate key pairs for joining the sync circle and encrypting and decrypting the keychain items.
0235As shown, the devices A-C form the sync circle <b>2505</b> for the protection domain <b>1</b>. The devices A-C form the sync circle <b>2510</b> for the protection domain <b>2</b>. The devices A-C form the sync circle <b>2510</b> for the protection domain <b>3</b>. <figref idref="DRAWINGS">FIG. 25</figref> illustrates three sync circles are formed by the same three devices A-C. However, each of the devices A-C may form other sync circles (not shown) with devices other than the two other devices of the devices A-C for protection domains (not shown) other than the protection domains <b>1</b>-<b>3</b>.
0236While the sync circles <b>2505</b>-<b>2515</b> are illustrated in this figure as rings or circular shapes, each pair of devices establish a secure transport layer to form a sync circle. That is, the devices in a sync circle form a star network rather than a ring network in some embodiments.
0237<figref idref="DRAWINGS">FIG. 26</figref> conceptually illustrates a sync circle formed by several devices for several different protection domains. Specifically, this figure illustrates that three devices A-C form a sync circle <b>2605</b> for three different protection domains <b>1</b>-<b>3</b>. This figure also illustrates three groups of keychain items <b>2610</b>-<b>2620</b>.
0238In some embodiments, a group of devices form a single sync circle for several different protection domains. In some of these embodiments, each device of the group uses one pair of the several public/private key pairs for the several different protection domains, to join the single sync cycle. That is, each device of the group selects one pair of the several public/private key pairs for encrypting and decrypting the keychain items and uses the selected key pair to join the single sync circle. Alternatively or conjunctively, each device of the group in other embodiments uses none of the key pairs for encrypting and decrypting the keychain items but rather uses a separate key pair to join the single sync circle.
0239In some embodiments, each device of the group uses all of the several public/private key pairs for the several different protection domains to join the single sync circle. That is, each device of the group in these embodiments uses all of the key pairs for encrypting and decrypting the keychain items to join the sync circle. Therefore, in these embodiments, a device needs to meet all conditions of every one of the several different protection domains in order to join the sync circle because the device needs to have all the key pairs available.
0240In this example, the keychain items <b>2610</b> belong to the protection domain <b>1</b>. The keychain items <b>2610</b> are being pushed by the device C to the device A. The device C uses the public key of the device A that has been published to the devices B and C for the protection domain <b>1</b>, to encrypt the keychain items <b>2610</b>. However, the device C in this example has used all three public/private key pairs for the protection domains <b>1</b>-<b>3</b> to join the sync circle <b>2605</b>.
0241The keychain items <b>2620</b> belong to the protection domain <b>2</b>. The keychain items <b>2620</b> are being pushed by the device B to the device C. The device B uses the public key of the device C that has been published to the devices A and B for the protection domain <b>2</b>, to encrypt the keychain items <b>2620</b>. In this example, the device B has used all three public/private key pairs for the protection domains <b>1</b>-<b>3</b> to join the sync circle <b>2605</b>.
0242The keychain items <b>2615</b> belong to the protection domain <b>3</b>. The keychain items <b>2615</b> are being pushed by the device A to the device B. The device A uses the public key of the device B that has been published to the devices A and C for the protection domain <b>3</b>, to encrypt the keychain items <b>2615</b>. In this example, the device B has used all three public/private key pairs for the protection domains <b>1</b>-<b>3</b> to join the sync circle <b>2605</b>.
V. Software Architecture
0243In some embodiments, the processes described above are implemented as software running on a particular machine, such as a computer (e.g., a desktop, laptop, etc.), a handheld device (e.g., a smartphone), or a tablet computing device, or stored in a machine readable medium. <figref idref="DRAWINGS">FIG. 27</figref> conceptually illustrates a software architecture of a keychain manager <b>2700</b> of some embodiments. In some embodiments, the keychain manager is a stand-alone application for managing the synchronization of keychains between devices in sync circles. The keychain manager of some embodiments is integrated into another application (e.g., a keychain management application, data management application, a security application, etc.), while in other embodiments the application might be implemented within an operating system. Furthermore, in some embodiments, the application is provided as part of a server-based solution. In some such embodiments, the application is provided via a thin client. That is, the application runs on a server while a user interacts with the application via a separate machine remote from the server. In other such embodiments, the application is provided as a thick client. That is, the application is distributed from the server to the client machine and runs on the client machine.
0244The keychain manager <b>2700</b> of some embodiments is implemented to operate on different operating systems. In some embodiments, different operating systems (e.g., iOS®, Mac OS X®, etc.) use different architectures to manage keychains and keychain items. The keychain manager <b>2700</b> of some embodiments is implemented to synchronize keychains and keychain items among devices using different keychain management architectures. For instance, in some embodiments, the keychain manager <b>2700</b> is implemented for a particular keychain management architecture (e.g., iOS®) and ported to operate with another keychain management architecture (e.g., Mac OS X®).
0245As shown, the keychain manager <b>2700</b> includes a synchronization manager <b>2705</b>, registration manager <b>2710</b>, a keychain item manager <b>2715</b>, a cryptography module <b>2720</b>, a manifest module <b>2725</b>, and a conflict resolver <b>2730</b>. The keychain manager <b>2700</b> also includes sync circle data storage <b>2735</b>, device manifests storage <b>2740</b>, conflict rules storage <b>2745</b>, keychains storage <b>2750</b>, and security data storage <b>2755</b>. In some embodiments, the sync circle data <b>2735</b> stores a local copy of the data stored in storages <b>310</b>-<b>330</b> described above by reference to <figref idref="DRAWINGS">FIG. 3</figref>. That is, the sync circle data storage <b>2735</b> stores a name for a sync circle, a sync circle device list, user signatures, device signatures, and keychain data, and, other data. The device manifests storage <b>2740</b> stores a history of manifest for each of the devices in a sync circle. The conflict rules storage <b>2745</b> stores a previous versions of conflict resolves, a current version of the conflict resolver that is used to resolve keychain item conflicts, and various rules associated with the previous versions and current version of conflict resolvers. The keychains storage <b>2750</b> stores the keychains for syncing with devices in sync circles. In some embodiments, the keychains storage <b>2750</b> also stores keychains and/or keychain items that are not shared (i.e., synchronized) with other devices in sync circles. The security data storage <b>2755</b> stores data related to security features (e.g., secure communication channels (e.g., security keys), data encryption (e.g., encryption keys), data decryption (e.g. decryption keys), data authentication (e.g., decryption keys), etc.) that the keychain manager <b>2700</b> provides for facilitating the synchronization of keychains. In some embodiments, the storages <b>2735</b>-<b>2755</b> are stored in one physical storage while, in other embodiments, the storages <b>2735</b>-<b>2755</b> are stored on separate physical storages. Still, in some embodiments, some or all of the storages <b>2735</b>-<b>2755</b> are implemented across several physical storages.
0246The synchronization manager <b>2705</b> is responsible for managing the synchronization of keychains between devices in sync circles. In some embodiments, the synchronization manager <b>2705</b> started by the registration manager <b>2710</b> after the devices on which the keychain manager <b>2700</b> operates has successfully registered into a sync circle. In some embodiments, the synchronization manager <b>2705</b> is handles the data protection features described above in Section IV. The synchronization manager communicates with the other modules <b>2710</b> and <b>2715</b>-<b>2730</b> in order to accomplish the synchronization of keychains between devices in sync circles.
0247The registration manager <b>2710</b> handles the various functions related to registering devices into a sync circle. For instance, when the device on which the keychain manager is operating wishes to join a sync circle, the registration manager <b>2710</b> creates a sync circle when one does not exist. The registration manager <b>2710</b> also handles registration request generation (e.g., by performing the process <b>500</b> described above by reference to <figref idref="DRAWINGS">FIG. 5</figref>), registration request approval (e.g., by performing the process <b>600</b> described above by reference to <figref idref="DRAWINGS">FIG. 6</figref>), registration approval acknowledgement, etc.
0248The keychain item manager <b>2715</b> creates and manages keychain items for keychains. In some embodiments, the keychain item manager <b>2715</b> generates and maintains the data structures (e.g., the data structure described above by reference to <figref idref="DRAWINGS">FIG. 10</figref>) that represent some or all of the keychain items in keychains.
0249The security module <b>2720</b> provides the functionality for various security features. For example, the security module <b>2720</b> handles the establishment of secure communication channels with each of the devices in sync circles. The security module <b>2720</b> performs different cryptography primitives, algorithms, protocols, and techniques (e.g., OTR messaging, Diffie-Hellman key exchanges, public/private key pair generation, etc.) in order to implement the various security features.
0250The manifest module <b>2725</b> is responsible for generating the different types of manifest based on the local keychain items and, in some cases, the manifests of peer devices. For instance, the manifest module <b>2725</b> generates manifest digests, complete manifests, and delta manifest. To facilitate in the generation of manifest, the manifest module <b>2725</b> maintains the history of manifest for each of the devices in sync circles. The manifest module <b>2725</b> also performs the comparisons between local keychain items (or local manifests) and the manifest of peer devices in the generation of delta manifests.
0251The conflict resolver <b>2730</b> handles the resolving of conflicts between keychain items. For example, the conflict resolver <b>2730</b> compares local keychain items and keychain items of peer devices to identify conflicts. The conflict resolver also executes conflict resolvers (e.g., stored in the conflict rules storage <b>2745</b>) in order to resolve the keychain item conflicts. Additionally, the conflict resolver <b>2730</b> is responsible for detecting conflicts between conflict resolvers and determining the conflict resolver to use to resolve the keychain item conflicts.
0252While many of the features have been described as being performed by one module (e.g., the registration module <b>2710</b>, the security module <b>2720</b>, etc.), one of ordinary skill in the art would recognize that the functions might be split up into multiple modules. Similarly, the functions described as being performed by multiple different modules might be performed by a single module in some embodiments (e.g., the keychain item manager <b>2715</b> and the conflict resolver <b>2730</b>).
VI. Electronic System
0253Many of the above-described features and applications are implemented as software processes that are specified as a set of instructions recorded on a computer readable storage medium (also referred to as computer readable medium). When these instructions are executed by one or more computational or processing unit(s) (e.g., one or more processors, cores of processors, or other processing units), they cause the processing unit(s) to perform the actions indicated in the instructions. Examples of computer readable media include, but are not limited to, CD-ROMs, flash drives, random access memory (RAM) chips, hard drives, erasable programmable read-only memories (EPROMs), electrically erasable programmable read-only memories (EEPROMs), etc. The computer readable media does not include carrier waves and electronic signals passing wirelessly or over wired connections.
0254In this specification, the term “software” is meant to include firmware residing in read-only memory or applications stored in magnetic storage which can be read into memory for processing by a processor. Also, in some embodiments, multiple software inventions can be implemented as sub-parts of a larger program while remaining distinct software inventions. In some embodiments, multiple software inventions can also be implemented as separate programs. Finally, any combination of separate programs that together implement a software invention described here is within the scope of the invention. In some embodiments, the software programs, when installed to operate on one or more electronic systems, define one or more specific machine implementations that execute and perform the operations of the software programs.
0255<figref idref="DRAWINGS">FIG. 28</figref> conceptually illustrates an electronic system <b>2800</b> with which some embodiments of the invention are implemented. The electronic system <b>2800</b> may be a computer (e.g., a desktop computer, personal computer, tablet computer, etc.), phone, PDA, or any other sort of electronic or computing device. Such an electronic system includes various types of computer readable media and interfaces for various other types of computer readable media. Electronic system <b>2800</b> includes a bus <b>2805</b>, processing unit(s) <b>2810</b>, a graphics processing unit (GPU) <b>2815</b>, a system memory <b>2820</b>, a network <b>2825</b>, a read-only memory <b>2830</b>, a permanent storage device <b>2835</b>, input devices <b>2840</b>, and output devices <b>2845</b>.
0256The bus <b>2805</b> collectively represents all system, peripheral, and chipset buses that communicatively connect the numerous internal devices of the electronic system <b>2800</b>. For instance, the bus <b>2805</b> communicatively connects the processing unit(s) <b>2810</b> with the read-only memory <b>2830</b>, the GPU <b>2815</b>, the system memory <b>2820</b>, and the permanent storage device <b>2835</b>.
0257From these various memory units, the processing unit(s) <b>2810</b> retrieves instructions to execute and data to process in order to execute the processes of the invention. The processing unit(s) may be a single processor or a multi-core processor in different embodiments. Some instructions are passed to and executed by the GPU <b>2815</b>. The GPU <b>2815</b> can offload various computations or complement the image processing provided by the processing unit(s) <b>2810</b>. In some embodiments, such functionality can be provided using CoreImage's kernel shading language.
0258The read-only-memory (ROM) <b>2830</b> stores static data and instructions that are needed by the processing unit(s) <b>2810</b> and other modules of the electronic system. The permanent storage device <b>2835</b>, on the other hand, is a read-and-write memory device. This device is a non-volatile memory unit that stores instructions and data even when the electronic system <b>2800</b> is off. Some embodiments of the invention use a mass-storage device (such as a magnetic or optical disk and its corresponding disk drive) as the permanent storage device <b>2835</b>.
0259Other embodiments use a removable storage device (such as a floppy disk, flash memory device, etc., and its corresponding drive) as the permanent storage device. Like the permanent storage device <b>2835</b>, the system memory <b>2820</b> is a read-and-write memory device. However, unlike storage device <b>2835</b>, the system memory <b>2820</b> is a volatile read-and-write memory, such a random access memory. The system memory <b>2820</b> stores some of the instructions and data that the processor needs at runtime. In some embodiments, the invention's processes are stored in the system memory <b>2820</b>, the permanent storage device <b>2835</b>, and/or the read-only memory <b>2830</b>. For example, the various memory units include instructions for processing multimedia clips in accordance with some embodiments. From these various memory units, the processing unit(s) <b>2810</b> retrieves instructions to execute and data to process in order to execute the processes of some embodiments.
0260The bus <b>2805</b> also connects to the input and output devices <b>2840</b> and <b>2845</b>. The input devices <b>2840</b> enable the user to communicate information and select commands to the electronic system. The input devices <b>2840</b> include alphanumeric keyboards and pointing devices (also called “cursor control devices”), cameras (e.g., webcams), microphones or similar devices for receiving voice commands, etc. The output devices <b>2845</b> display images generated by the electronic system or otherwise output data. The output devices <b>2845</b> include printers and display devices, such as cathode ray tubes (CRT) or liquid crystal displays (LCD), as well as speakers or similar audio output devices. Some embodiments include devices such as a touchscreen that function as both input and output devices.
0261Finally, as shown in <figref idref="DRAWINGS">FIG. 28</figref>, bus <b>2805</b> also couples electronic system <b>2800</b> to a network <b>2825</b> through a network adapter (not shown). In this manner, the computer can be a part of a network of computers (such as a local area network (“LAN”), a wide area network (“WAN”), or an Intranet, or a network of networks, such as the Internet. Any or all components of electronic system <b>2800</b> may be used in conjunction with the invention.
0262Some embodiments include electronic components, such as microprocessors, storage and memory that store computer program instructions in a machine-readable or computer-readable medium (alternatively referred to as computer-readable storage media, machine-readable media, or machine-readable storage media). Some examples of such computer-readable media include RAM, ROM, read-only compact discs (CD-ROM), recordable compact discs (CD-R), rewritable compact discs (CD-RW), read-only digital versatile discs (e.g., DVD-ROM, dual-layer DVD-ROM), a variety of recordable/rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.), flash memory (e.g., SD cards, mini-SD cards, micro-SD cards, etc.), magnetic and/or solid state hard drives, read-only and recordable Blu-Ray® discs, ultra density optical discs, any other optical or magnetic media, and floppy disks. The computer-readable media may store a computer program that is executable by at least one processing unit and includes sets of instructions for performing various operations. Examples of computer programs or computer code include machine code, such as is produced by a compiler, and files including higher-level code that are executed by a computer, an electronic component, or a microprocessor using an interpreter.
0263While the above discussion primarily refers to microprocessor or multi-core processors that execute software, some embodiments are performed by one or more integrated circuits, such as application specific integrated circuits (ASICs) or field programmable gate arrays (FPGAs). In some embodiments, such integrated circuits execute instructions that are stored on the circuit itself. In addition, some embodiments execute software stored in programmable logic devices (PLDs), ROM, or RAM devices.
0264As used in this specification and any claims of this application, the terms “computer”, “server”, “processor”, and “memory” all refer to electronic or other technological devices. These terms exclude people or groups of people. For the purposes of the specification, the terms display or displaying means displaying on an electronic device. As used in this specification and any claims of this application, the terms “computer readable medium,” “computer readable media,” and “machine readable medium” are entirely restricted to tangible, physical objects that store information in a form that is readable by a computer. These terms exclude any wireless signals, wired download signals, and any other ephemeral signals.
0265While the invention has been described with reference to numerous specific details, one of ordinary skill in the art will recognize that the invention can be embodied in other specific forms without departing from the spirit of the invention. In addition, a number of the figures (including <figref idref="DRAWINGS">FIGS. 5</figref>, <b>6</b>, and <b>12</b>-<b>15</b>) conceptually illustrate processes. The specific operations of these processes may not be performed in the exact order shown and described. The specific operations may not be performed in one continuous series of operations, and different specific operations may be performed in different embodiments. Furthermore, the process could be implemented using several sub-processes, or as part of a larger macro process. Thus, one of ordinary skill in the art would understand that the invention is not to be limited by the foregoing illustrative details, but rather is to be defined by the appended claims.
Contents4
29 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5 Sheet 6 Sheet 7 Sheet 8 Sheet 9 Sheet 10 Sheet 11 Sheet 12 Sheet 13 Sheet 14 Sheet 15 Sheet 16 Sheet 17 Sheet 18 Sheet 19 Sheet 20 Sheet 21 Sheet 22 Sheet 23 Sheet 24 Sheet 25 Sheet 26 Sheet 27 Sheet 28 Sheet 29
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| GB2564430B | Cited by | United Kingdom | Search report |
| US10887294B2 | Cited by | United States of America | Applicant |
| US11595207B2 | Cited by | United States of America | Search report |
| US10148736B1 | Cited by | United States of America | Search report |
| EP4280544A3 | Cited by | European Patent Office (EPO) | Search report |
| US10425225B1 | Cited by | United States of America | Applicant |
| US9860314B2 | Cited by | United States of America | Search report |
| US10764047B2 | Cited by | United States of America | Search report |
| US11070531B2 | Cited by | United States of America | Applicant |
| US12126719B2 | Cited by | United States of America | Applicant |
| US10313123B1 | Cited by | United States of America | Applicant |
| US11831787B2 | Cited by | United States of America | Applicant |
| US2016057219A1 | Cited by | United States of America | Pre-grant |
| US11343081B2 | Cited by | United States of America | Applicant |
| US10205598B2 | Cited by | United States of America | Search report |
| US2022200800A1 | Cited by | United States of America | Search report |
| WO2022139888A1 | Cited by | World Intellectual Property Organization (WIPO) | International search |
| GB2564430A | Cited by | United Kingdom | Search report |
| US10263778B1 | Cited by | United States of America | Search report |
| US10250579B2 | Cited by | United States of America | Search report |
| US2002013898A1 | Cites | United States of America | Pre-grant |
| US2002095568A1 | Cites | United States of America | Pre-grant |
| US2002099772A1 | Cites | United States of America | Pre-grant |
| US2002143944A1 | Cites | United States of America | Pre-grant |
| US2002194108A1 | Cites | United States of America | Pre-grant |
| US2003044020A1 | Cites | United States of America | Pre-grant |
| US2003055892A1 | Cites | United States of America | Pre-grant |
| US2003084311A1 | Cites | United States of America | Pre-grant |
| US2003105768A1 | Cites | United States of America | Pre-grant |
| US2003163684A1 | Cites | United States of America | Pre-grant |
| US2003163697A1 | Cites | United States of America | Pre-grant |
| US2003177361A1 | Cites | United States of America | Pre-grant |
| US2003204734A1 | Cites | United States of America | Pre-grant |
| US2004024912A1 | Cites | United States of America | Pre-grant |
| US2004034773A1 | Cites | United States of America | Pre-grant |
| US2004034776A1 | Cites | United States of America | Pre-grant |
| US2004062400A1 | Cites | United States of America | Pre-grant |
| US2004133640A1 | Cites | United States of America | Pre-grant |
| US2004179511A1 | Cites | United States of America | Pre-grant |
| US2005081029A1 | Cites | United States of America | Pre-grant |
| US2005195755A1 | Cites | United States of America | Pre-grant |
| US2005289644A1 | Cites | United States of America | Pre-grant |
| US2006031587A1 | Cites | United States of America | Pre-grant |
| US2006041603A1 | Cites | United States of America | Pre-grant |
| US2006069809A1 | Cites | United States of America | Pre-grant |
| US2006168446A1 | Cites | United States of America | Pre-grant |
| US2006193474A1 | Cites | United States of America | Pre-grant |
| US2006242405A1 | Cites | United States of America | Pre-grant |
| US2006250958A1 | Cites | United States of America | Pre-grant |
| US2006277092A1 | Cites | United States of America | Pre-grant |
| US2007033271A1 | Cites | United States of America | Pre-grant |
| US2007039039A1 | Cites | United States of America | Pre-grant |
| US2007124310A1 | Cites | United States of America | Pre-grant |
| US2007143612A1 | Cites | United States of America | Pre-grant |
| US2007168336A1 | Cites | United States of America | Pre-grant |
| US2008005188A1 | Cites | United States of America | Pre-grant |
| US2008005195A1 | Cites | United States of America | Pre-grant |
| US2008028450A1 | Cites | United States of America | Pre-grant |
| US2008031459A1 | Cites | United States of America | Pre-grant |
| US2008049779A1 | Cites | United States of America | Pre-grant |
| US2008086770A1 | Cites | United States of America | Pre-grant |
| US2008123855A1 | Cites | United States of America | Pre-grant |
| US2008130630A1 | Cites | United States of America | Pre-grant |
| US2008165807A1 | Cites | United States of America | Pre-grant |
| US2008168183A1 | Cites | United States of America | Pre-grant |
| US2008244706A1 | Cites | United States of America | Pre-grant |
| US2009070571A1 | Cites | United States of America | Pre-grant |
| US2009077638A1 | Cites | United States of America | Pre-grant |
| US2009113412A1 | Cites | United States of America | Pre-grant |
| US2009205036A1 | Cites | United States of America | Pre-grant |
| US2009228509A1 | Cites | United States of America | Pre-grant |
| US2009254589A1 | Cites | United States of America | Pre-grant |
| US2009260064A1 | Cites | United States of America | Pre-grant |
| US2009268906A1 | Cites | United States of America | Pre-grant |
| US2009290715A1 | Cites | United States of America | Pre-grant |
| US2010017371A1 | Cites | United States of America | Pre-grant |
| US2010082534A1 | Cites | United States of America | Pre-grant |
| US2010146076A1 | Cites | United States of America | Pre-grant |
| US2010261488A1 | Cites | United States of America | Pre-grant |
| US2010306280A1 | Cites | United States of America | Pre-grant |
| US2010306827A1 | Cites | United States of America | Pre-grant |
| US2011010340A1 | Cites | United States of America | Pre-grant |
| US2011055593A1 | Cites | United States of America | Pre-grant |
| US2011179270A1 | Cites | United States of America | Pre-grant |
| US2011225417A1 | Cites | United States of America | Pre-grant |
| US2012023550A1 | Cites | United States of America | Pre-grant |
| US2012079095A1 | Cites | United States of America | Pre-grant |
| US2012096368A1 | Cites | United States of America | Pre-grant |
| US2012109830A1 | Cites | United States of America | Pre-grant |
| US2012131656A1 | Cites | United States of America | Pre-grant |
| US2012136732A1 | Cites | United States of America | Pre-grant |
| US2012173356A1 | Cites | United States of America | Pre-grant |
| US2012185434A1 | Cites | United States of America | Pre-grant |
| US2012204032A1 | Cites | United States of America | Pre-grant |
| US2013018859A1 | Cites | United States of America | Pre-grant |
| US2013067243A1 | Cites | United States of America | Pre-grant |
| US2013110956A1 | Cites | United States of America | Pre-grant |
| US2013145447A1 | Cites | United States of America | Pre-grant |
| US2013191897A1 | Cites | United States of America | Pre-grant |
| US2013268357A1 | Cites | United States of America | Pre-grant |
44 members in 8 offices
Priority claims2
| Document | Office | Kind | Date |
|---|---|---|---|
| 201361754524 | United States of America | P | |
| 201313839050 | United States of America | A |
Members44
| Document | Office | Kind | |
|---|---|---|---|
| US2014208404A1 | United States of America | A1 | |
| US2014208434A1 | United States of America | A1 | |
| WO2014113196A1 | World Intellectual Property Organization (WIPO) | A1 | |
| WO2014113196A4 | World Intellectual Property Organization (WIPO) | A4 | |
| US2014281540A1 | United States of America | A1 | |
| TW201443684A | Taiwan Province of China | A | |
| US9077759B2 | United States of America | B2 | |
| AU2013374203A1 | Australia | A1 | |
| KR20150095872A | Republic of Korea | A | |
| US9124637B2 | United States of America | B2 | |
| CN104919775A | China | A | |
| US9197700B2 | United States of America | B2 | |
| EP2946541A1 | European Patent Office (EPO) | A1 | |
| TWI512534B | Taiwan Province of China | B | |
| US2016044101A1 | United States of America | A1 | |
| JP2016505226A | Japan | A | |
| US2016065548A1 | United States of America | A1 | |
| AU2013374203B2 | Australia | B2 | |
| US2016308674A1 | United States of America | A1 | |
| US9479583B2 | United States of America | B2 | |
| AU2016269486A1 | Australia | A1 | |
| US2017011234A1 | United States of America | A1 | |
| JP6072305B2 | Japan | B2 | |
| KR101713307B1 | Republic of Korea | B1 | |
| KR20170026668A | Republic of Korea | A | |
| US9684801B2 | United States of America | B2 | |
| US9710673B2 | United States of America | B2 | |
| KR101787955B1 | Republic of Korea | B1 | |
| CN104919775B | China | B | |
| CN108055131A | China | A | |
| CN108055283A | China | A | |
| CN108055352A | China | A | |
| AU2018274985A1 | Australia | A1 | |
| US10218685B2 | United States of America | B2 | |
| US2019273729A1 | United States of America | A1 | |
| US10771545B2 | United States of America | B2 | |
| EP2946541B1 | European Patent Office (EPO) | B1 | |
| CN108055283B | China | B | |
| AU2018274985B2 | Australia | B2 | |
| CN108055131B | China | B | |
| CN108055352B | China | B | |
| AU2018274985B9 | Australia | B9 | |
| EP3860080A1 | European Patent Office (EPO) | A1 | |
| EP3860080B1 | European Patent Office (EPO) | B1 |
95 transactions on the USPTO file
Allowed after 3 non-final rejections, 2 final rejections and 2 RCEs.
- Non-final rejections
- 3
- Final rejections
- 2
- RCEs
- 2
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Payment of Maintenance Fee, 4th Year, Large EntityM1551 | M1551 | |
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Patent Issue Date Used in PTA CalculationAllowedPTAC | PTAC | |
| Email NotificationEML_NTR | EML_NTR | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Printer Rush- No mailingTCPB | TCPB | |
| Printer Rush- No mailingTCPB | TCPB | |
| Pubs Case Remand to TCPUBTC | PUBTC | |
| Application Is Considered Ready for IssuePILS | PILS | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Response to Reasons for AllowanceREAS | REAS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Examiner's Amendment CommunicationEX.A | EX.A | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Letter Requesting Interview with ExaminerM865 | M865 | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Email NotificationEML_NTR | EML_NTR | |
| Change in Power of Attorney (May Include Associate POA)PA.. | PA.. | |
| Correspondence Address ChangeC.AD | C.AD | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Miscellaneous Incoming LetterLET. | LET. | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Reference capture on IDSRCAP | RCAP | |
| Information Disclosure Statement (IDS) FiledM844 | M844 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Email NotificationEML_NTR | EML_NTR | |
| Application ready for PDX access by participating foreign officesCCRDY | CCRDY | |
| PG-Pub Issue NotificationPG-ISSUE | PG-ISSUE | |
| Application Dispatched from OIPEOIPE | OIPE | |
| Email NotificationEML_NTR | EML_NTR | |
| Letter Accepting Permission for Application Access by Foreign IPOSB39ACPR | SB39ACPR | |
| Application Is Now CompleteCOMP | COMP | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Sent to Classification ContractorPGPC | PGPC | |
| FITF set to NO - revise initial settingFTFI | FTFI | |
| Cleared by L&R (LARS)L128 | L128 | |
| Referred to Level 2 (LARS) by OIPE CSRL198 | L198 | |
| Preliminary AmendmentA.PE | A.PE | |
| Patent Term Adjustment - Ready for ExaminationPTA.RFE | PTA.RFE | |
| Applicants have given acceptable permission for participating foreignAPPERMS | APPERMS | |
| Entity Status Set To Undiscounted (Initial Default Setting or Status Change)BIG. | BIG. | |
| Initial Exam Team nnIEXX | IEXX |
2 legal events, as the office reported them to INPADOC
Over the term
Point at a mark for the eventEvents
| Event | Code | |
|---|---|---|
| Maintenance fee paymentMAFP | MAFP | |
| Information on status: patent grantGrantedPATENTED CASESTCF | STCF |
Numbers
- Publication
- 20160065548
- Application
- 14937830
Titles
- English
- KEYCHAIN SYNCING
Patent term adjustment
- Applicant delay
- −40 days
- Net adjustment
- 0 days
Classification
- CPC, 17
- H04L63/061
- H04L63/065
- H04L67/104
- H04L67/1042
- H04L67/1095
- H04L12/44
- H04L9/12
- H04L9/3247
- H04L63/068
- H04L2209/122
- G06F16/27
- G06F16/178
- H04L67/306
- H04L12/185
- H04L63/062
- H04L63/104
- H04W84/18
- IPC, 3
- H04L29 06
- H04L12 44
- H04L29 08