|Publication number||US6965994 B1|
|Application number||US 09/773,256|
|Publication date||Nov 15, 2005|
|Filing date||Jan 30, 2001|
|Priority date||Jan 30, 2001|
|Also published as||US7225330, US7549173, US20050246524, US20070124580, WO2002061557A2, WO2002061557A3|
|Publication number||09773256, 773256, US 6965994 B1, US 6965994B1, US-B1-6965994, US6965994 B1, US6965994B1|
|Inventors||Jason S. Brownell, Steven T. Ansell, Perry T. Devine, Earl Levine|
|Original Assignee||Microsoft Corporation|
|Export Citation||BiBTeX, EndNote, RefMan|
|Patent Citations (14), Non-Patent Citations (3), Referenced by (29), Classifications (13), Legal Events (6)|
|External Links: USPTO, USPTO Assignment, Espacenet|
Computer programs are currently made extensible and efficient by the use of adjunct program modules such as plug-ins and dynamic link libraries. Plug-ins are computer program modules which can alter the behavior of a computer program without changing the computer program itself. A common example of plug-ins are those associated with currently ubiquitous web browsers. Briefly, a web browser is a computer program by which a user retrieves multimedia documents and information through that portion of the Internet known as the World Wide Web. Installation of plug-ins allow modification of the behavior of the web browser without re-installing or otherwise changing the computer instructions of the web browser itself. One example of such extended functionality is the embedded display of images of the Tagged Image File Format (TIFF). Such functionality is not provided by some web browsers currently, but installation of certain plug-ins add that functionality. To use the plug-in, applications such as web browsers are designed to look for installed plug-ins and, if installed, invoke execution of those plug-ins upon activation of a particular function or activity.
Plug-ins can sometimes be implemented as dynamic link libraries. Dynamic link libraries can be used for other purposes as well. A dynamic link library is a collection of program modules which are generally not loaded until invoked by another program. The following example will illustrate. Consider a web browser which provides a spell-checking capability for forms data entry. A web browser is typically a resource-intensive program such that a considerable amount of memory is used when the web browser is executing. A spell-checker can also be resource-intensive. By implementing the spell-checker as part of a dynamic link library, execution of the web browser does not immediately load the spell-checker into memory. Accordingly, the resources required for the spell-checker are not immediately consumed. Instead, the spell-checker is loaded for execution only when a user requests a spell checking function of the web browser. Such allows the web browser to execute more efficiently when the spell-check function is not invoked.
For reasons pertaining both to extensibility and efficiency, adjunct program modules such as plug-ins and modules of dynamic link libraries are quite popular. An additional factor in the popularity of such adjunct program modules is the simplicity with which they are implemented. To facilitate the use of adjunct processing modules, such modules are designed to be very easily identified and invoked. Virtually no safeguards are used to ensure only a specifically authorized computer program invokes execution of a particular adjunct program module.
The lack of security in adjunct program modules is a significant problem. The following example is illustrative. Consider that a computer user has collected a number of musical songs in the ubiquitous and renowned MP3 digital format and plays the songs on a computer using an MP3 player program. Consider further that the user has purchased and downloaded a number of songs in a secure, copy-protected format but wishes to play those songs along with the other songs in the MP3 format. The MP3 player program can be augmented with a plug-in adjunct program module to decode and play the secure, copy-protected format. Such an adjunct program module, when requested, can decode the secure, copy-protected music and produce un-secured, un-protected music for reproduction through the computer's sound logic and loudspeakers.
However, due to the accessibility of conventional adjunct program modules, any program could request decoding of the secure, copy-protected music data by the decoding adjunct program module. Accordingly, a cracker could write a simple program to request decoding from the adjunct program module and to re-write the decoded music in the MP3 format. The resulting MP3 music data file could have identical sound quality and could be distributed worldwide through the Internet without any encryption security or copy-protection. Such would represent a catastrophic failure of the secure, copy-protected format decoded by the adjunct program module.
What is therefore needed is a security mechanism by which adjunct program modules can limit service to authorized program modules. Such would enable security-reliant computer processes to avail themselves of the benefits and advantages of adjunct program modules.
In accordance with the present invention, an adjunct program module can require a certificate from a requesting program module to authenticate the requesting program module as authorized to request processing by the adjunct program module. The adjunct program module only performs requested processing when the certificate received from the requesting program module indicates that the requesting program module is authorized to request such processing. In this way, processing is not performed when requested by an unauthorized program module and security is significantly enhanced.
The interface of the adjunct program module indicates that the adjunct program module requires an authorization interface of the requesting program module. The authorization interfaces specifies the manner in which the invoked adjunct program module can request authorization. The use of an authorization interface allows increased flexibility in the implementation of authorization protocols according to the present invention. If the invoked adjunct program module requires a certificate for authentication, the invoked adjunct program module requests, and receives, the certificate from the requester using the requester's authorization interface.
There are a number of ways in which the certificate can be validated as indicating that the requesting program module is authorized to request such processing. The certificate is cryptographically signed by a certificate authority and verification of that signature ensures that no entity has tampered with the certificate, perhaps to alter the identity of the owner of the certificate or to add permissions to the certificate. Failure to validate the certificate authority's signature results in refusal to perform the requested processing.
The received certificate only authorizes processing by the owner of the certificate. The received certificate identifies its owner. If the program module requesting processing is not the owner of the certificate, the adjunct program module refuses to perform the requested processing. The owner's identity can be verified using a challenge-response protocol. In addition, the certificate expires at a predetermined time, and the adjunct program module refuses to perform the requested processing if the certificate has expired.
The certificate also includes a number of permissions. Each permission includes data which is associated with one or more types of actions which are authorized by the certificate. The adjunct program module can be configured to perform processing only when the received certificate includes a specific, predetermined permission. The use of permissions adds a significant degree of flexibility in the security protocol described herein. For example, a particular permission could grant its owner the authority to examine parts of a secure, copy-protected audio signal, such as the title and artist of the audio signal, without granting authority to the decoded, unsecured, unprotected audio data stream.
As mentioned above, the identity of the requester as the owner of the certificate can be challenged. Thus, stealing a certificate of, and masquerading as, an authorized requesting program module is insufficient. The challenge response mechanism according to the present invention verifies that the requesting module has access to a private key associated with the certificate.
To challenge the authority of the requesting module, the adjunct program module randomly produces test data and requires that the requester cryptographically processes the test data as a precondition to performing processing requested by the requester. The cryptographic processing by the requester involves asymmetric key encryption and use by the requester of the requester's private key. Requiring cryptographic use of the requester's private key establishes that the private key of the requester matches the public key of the requester's certificate and therefore confirms the requester's identity and authority.
Individually, each of these individual security mechanisms can be used by the adjunct program module to significantly deter unauthorized use of adjunct program modules. The described security mechanisms can also be combined to provide a tremendous deterrence to unauthorized use of adjunct program modules over conventional adjunct program module interfaces.
In accordance with the present invention, a security protocol is implemented between an application 102 (
Application 102 and components 104A–B are each all or part of one or more computer processes executing within computer system 200 (
A user interacts with computer system 200 through one or more input/output (I/O) devices 208 which can include, for example, a keyboard, an electronic mouse, trackball, tablet or similar locator device, an optical scanner, a printer, a CRT or LCD monitor, a sound card, a microphone, one or more loudspeakers, and/or a network access device through which computer system 200 can be connected to a computer network. To facilitate understanding of the inter-operation of the elements of computer system 200 according to this illustrative embodiment, the illustrative example of playback of secured and copy-protected audio data is continued. Under control of a user, e.g., through physical manipulation of one or more of I/O devices 208, application 102 and components 104 collectively decode the secured, copy-protected audio data to produce raw audio data for playback through one or more of I/O devices 208 such as a sound card and loudspeakers. While computer system 200 is shown to be a single computer system, it is appreciated that application 102 and/or one or more of components 104 can be distributed over multiple computer systems which are interconnected to perform the functions described herein.
Furthering the illustrative example of decoding and playing back secured, copy-protected audio data, such decoding is performed by one of components 104, e.g., component 104B (
As shown in
Application 102 includes interface references 120, each of which identifies an interface which in turn specifies a manner in which application 102 interacts with an adjunct program module such as component 104A. Component 104A includes an invocation interface 145A which specifies a manner in which execution of component 104A is invoked. To request processing by component 104A, application 102 must first acquire access to invocation interface 145A. Application 102 requests, and component 104A provides, a reference to invocation interface 145A which application 102 stores in interface references 120 and subsequently uses to request processing from component 104A.
Component 104A also includes one or more interface references 140A each of which identifies an interface which in turn specifies a manner by which component 104A can invoke execution of other components such as component 104B. Component 104B includes invocation interface 145B and interface references 140B which are analogous to invocation interface 145A and interfaces 140A, respectively, of component 104A.
To facilitate the security protocol described herein, each application and component can include an authorization interface. For example, application 102 includes authorization interface 129 which specifies the manner in which another program module can request authentication of application 102. Components 104A–B similarly include authorization interfaces 149A–B, respectively.
Application 102 also includes an authorization provider 128 which includes computer instructions and data which specify the behavior of application 102 when authentication is requested in accordance with authorization interface 129. Components 104A and 104B similarly include authorization providers 148A and 148B, respectively.
To authenticate a requesting program module, an adjunct program module can request a certificate of the requesting program module. In response, the authorization provider of the requesting program module supplies a certificate of the requesting program module. For example, application 102 includes a certificate 122, component 104A includes a certificate 142A, and component 104B includes a certificate 142B. While each certificate is shown to be included within each application or component, each certificate can alternatively be stored in memory 204 (
Certificates are well-known and are described herein for completeness. However, full appreciation of certificates requires a basic understanding of asymmetric encryption which is also well-known and which is also described herein for completeness. The simplest of encryption techniques uses the same key for encryption and decryption. Encryption scrambles data from its original, native form to a scrambled, apparently undecipherable form. Decryption recovers the original data from the scrambled, apparently undecipherable form. Symmetric key encryption can be satisfactory for secure archival in which the person who is likely to want to decrypt the data is the same person who encrypted the data in the first place. However, when one party wishes to encrypt data for secure transport to another party, symmetric key encryption requires that the key is somehow transported as well, compromising security and/or representing a significant inconvenience.
Asymmetric key encryption uses pairs of reciprocal keys. The keys are reciprocal in that encryption by one key of the pair can only be undone by decrypting using the other key of the pair. Asymmetric key encryption is sometimes referred to as public key encryption because one key of a pair of reciprocal keys is held in strict secrecy and privacy while the other key of the pair is distributed publicly within the system of intended use of the public key. The system of intended use can be as large or larger than the Internet and can be as small as a single computer. Data can be encrypted for transport to a receiving party by encrypting the data using the public key of the receiving party. Thus, only the private key of the receiving party can decrypt the data.
Public key encryption also permits cryptographic signatures of data. To sign a collection of data, a party uses its private key to encrypt the data or, alternatively, to form a hash of the data such that the data is still available in cleartext form without verification of the signature. The data can be decrypted—or alternatively the hash can be verified—using the public key of that party. Since the public key is widely and publicly distributed within the system of intended use, the data is not secure when encrypted in this manner. However, successful decryption of the data using the party's public key verifies that it was encrypted by the party using its private key and therefore verifies the authenticity of the data as originating with the signing party. Such a cryptographic signature can be used to verify that noone has tampered with the data after the data was cryptographically signed.
One issue with verifying cryptographic signatures is verification that a particular public key belongs to a particular party. For example, a cryptographic signature from a trusted party is only as reliable as the certainty that the public key used to verify the signature is truly from the trusted party and not some imposter. A certificate binds a public key to a particular party. Generally, a certificate includes a public key and data identifying the owner of the public key. The certificate is signed by a trusted certificate authority which is typically an organization that is widely trusted to issue certificates. The cryptographic signature of the certificate authority ensures that noone has tampered with the certificate after its issuance.
Certificate 122 (
Certificate 122 (
Certificate 122 includes a number of permissions 310. Each of permissions 310 includes data specifying one or more types of actions which are permitted for the owner of certificate 122, e.g., application 102 (
Logic flow diagrams 400A–B (
In step 402 (
The required parameters can include the authorization interface of the requester, e.g., authorization interface 149A. The required parameters can also, or alternatively, require an authorization interface of a requester of the requester. In this illustrative example, invocation interface 145B can require the authorization interface of application 102, e.g., authorization interface 129, in lieu of or in addition to the authorization interface of the requester, e.g., authorization interface 149A of component 104A.
In step 452, component 104B (
In test step 456 (
As described above, authorization verifier 147B verifies that the received certificate authorizes processing in test step 456. Test step 456 is shown in greater detail as logic flow diagram 456 (
The certificate authority of certificate 122 (
In test step 506, authorization verifier 147B (
In step 508, authorization verifier 147B challenges the requester to verify the identity of the requester. As described above, the requester can have directly or indirectly requested processing by component 104B. The manner in which the requester is challenged and responds is described more completely below. In test step 510, authorization verifier 147B determines whether the requester responded properly to the challenge. If so, processing transfers to test step 512.
In test step 512, authorization verifier 147B determines whether the certificate in question includes one or more required permissions. In particular, component 104B performs processing only when a certificate grants the direct or indirect requester permission for such processing. Thus, component 104B is configured to perform requested processing only when a supplied certificate includes one or more requisite permissions. Accordingly, authorization verifier 147B of component 104B, in test step 512, searches permissions 310 (
If all requisite permissions are found in the supplied certificate, processing transfers to terminal step 514 in which authorization verifier 147B of component 104B determines that the supplied certificate authorizes processing at the request of the requester. Conversely, if (i) one or more requisite permissions are not found in the supplied certificate (test step 512) or (ii) the requester responds improperly to the challenge (test step 510) or (iii) the supplied certificate has expired (test step 506) or (iv) the certificate's signature by the certificate authority is not verified (test step 504), processing transfers to terminal step 516 in which authorization verifier 147B of component 104B determines that the supplied certificate does not authorize processing at the request of the requester.
Thus, an attempt to request processing by component 104B from an unauthorized program module is prevented. Consider for example that component 104B decoded secure and copy-protected audio data for playback and produced therefrom uncompressed, cleartext, digital audio signals. Component 104B can require authentication of both component 104A as a direct requester and application 102 as an indirect requester. Any other module attempting to use component 104B to decode and decrypt such audio signals would have to produce a certificate identifying itself, having the proper permissions (test step 512), and signed by a certificate authority (test step 504). In addition, the imposter module would have to correctly respond to a challenge of the imposter's authority in steps 508–510. Each of these mechanisms provides security well beyond any security provided by conventional adjunct program modules.
The challenge-response authentication of steps 508–510 is shown more completely as logic flow diagram 508 (
Processing according to logic flow diagram 508 (
Component 104A includes challenge code 143A which includes computer instructions and data which collectively specify a behavior of authorization provider 148A of component 104A in response to a challenge such as that initiated by component 104B in step 604 (
In step 606, authorization verifier 147B receives the decrypted random data. In test step 608, authorization verifier 147B verifies the signature of the random data using the public key of the certificate in question. If the received signature is verified, authorization verifier 147B establishes that the requester responded properly to the challenge, thus proving that the requester has the private key associated with the supplied certificate. Conversely, if the received signature is not verified, authorization verifier 147B establishes that the requester did not respond properly to the challenge and therefore may not have the associated private key. Thus, as a precondition for processing as requested, component 104B can require both authentication in the form of a certificate and evidence that the requester has the associated private key in the requester's possession. Such represents a high level of security against unauthorized requests for processing by adjunct program modules.
An alternative challenge-response protocol is shown in logic flow diagrams 600B (
In step 672, authorization provider 148A (
In step 628 (
A number of advantages are realized by interposing an authorization interface between the invoked adjunct program module and the requesting program module. One such advantage is a significant degree of flexibility in implementing the security protocol described herein. The following example is illustrative. Consider that application 102 invokes component 104B directly and that later component 104A is interposed between application 102 and component 104B. Such is possible with very little modification, if any, to application and component 104B. Component 104B can still require certificate 122 of application 102 and can require proper challenge-response from application 102.
Specifically, application 102 invokes component 104A and provides authorization interface 129. Component 104A subsequently invokes component 104B and provides authorization interface 149A. Without modification, authorization verifier 147B expects to receive certificate 122 of application 102 and preconditions proper response to a challenge by application 102 in the manner described above. Accordingly, authorization verifier 147B requests a certificate using authorization interface 149A.
Authorization provider 148A receives the request for a certificate. However, since component 104B is constructed with the knowledge that component 104B expects to interact directly with application 102, authorization provider 148A requests and receives certificate 122 from application 102 using authorization interface 129 and passes certificate 122 to authorization verifier 147B. Accordingly, authorization verifier 147B receives the expected certificate.
Similarly, authorization provider 148A can forward authority challenges from authorization verifier 147B to authorization provider 128 and can forward associated responses from authorization provider 128 to authorization verifier 147B and thus preserve the authentication verification between application 102 and component 104B.
The flexibility afforded by the use of authorization protocols enables countless other possibilities. For example, authorization provider 148A can require authority verification by authorization verifier 147A and authorization provider 128 as a prerequisite to providing a required certificate to authorization verifier 147B. In addition, authorization provider 148A can include multiple certificates, each with different permissions and can provide a specific one of the certificates depending upon various circumstances.
Another advantage of using authorization interfaces is that the behavior of an authorization provider can be subsequently modified without requiring modification of other elements of a particular program module.
Yet another advantage of using authorization interfaces is that authorization code can be supplied separately from the substantive computer code of a particular program module. For example, one entity can provide authorization provider 148A and authorization interface 149A as object code to be linked into component 104A by a second, separate entity. Thus, the first-mentioned entity can provide the public key infrastructure of authorization provider 148A without disclosing the specific details of the public key infrastructure, thus preserving the security provided by the public key infrastructure. Simultaneously, the second entity can construct authorization verifier 147A to request certificates and challenge authorization of requesting program modules using authorization interfaces of those program modules without requiring knowledge of the specific details of the public key infrastructure. Such allows the security protocol described herein without disclosing the specific details to those who use the security protocol.
The above description is illustrative only and is not limiting. Instead, the present invention is defined solely by the following claims.
|Cited Patent||Filing date||Publication date||Applicant||Title|
|US5418713||Aug 5, 1993||May 23, 1995||Allen; Richard||Apparatus and method for an on demand data delivery system for the preview, selection, retrieval and reproduction at a remote location of previously recorded or programmed materials|
|US5636276||Apr 18, 1995||Jun 3, 1997||Brugger; Rolf||Device for the distribution of music information in digital form|
|US5734823||Jul 25, 1996||Mar 31, 1998||Microtome, Inc.||Systems and apparatus for electronic communication and storage of information|
|US5734891||Jun 12, 1996||Mar 31, 1998||Saigh; Michael M.||Systems and apparatus for electronic communication and storage of time encoded information|
|US5794217||Dec 3, 1996||Aug 11, 1998||Newleaf Entertainment Corporation||Apparatus and method for an on demand data delivery system for the preview, selection, retrieval and reproduction at a remote location of previously recorded or programmed materials|
|US5991399 *||Dec 18, 1997||Nov 23, 1999||Intel Corporation||Method for securely distributing a conditional use private key to a trusted entity on a remote system|
|US6088450 *||Apr 17, 1996||Jul 11, 2000||Intel Corporation||Authentication system based on periodic challenge/response protocol|
|US6105137 *||Jul 2, 1998||Aug 15, 2000||Intel Corporation||Method and apparatus for integrity verification, authentication, and secure linkage of software modules|
|US6138235 *||Jun 29, 1998||Oct 24, 2000||Sun Microsystems, Inc.||Controlling access to services between modular applications|
|US6301658 *||Sep 9, 1998||Oct 9, 2001||Secure Computing Corporation||Method and system for authenticating digital certificates issued by an authentication hierarchy|
|US6598167 *||Sep 24, 1998||Jul 22, 2003||Worldcom, Inc.||Secure customer interface for web based data management|
|US6615350 *||Mar 23, 1999||Sep 2, 2003||Novell, Inc.||Module authentication and binding library extensions|
|US6754829 *||Dec 14, 1999||Jun 22, 2004||Intel Corporation||Certificate-based authentication system for heterogeneous environments|
|WO1998007255A1||Aug 12, 1997||Feb 19, 1998||Information Resource Engineering, Inc.||Pocket encrypting and authenticating communications device|
|1||Housley, R. et al., "Internet X.509 Public Key Infrastructure Certificate and CRL Profile", Network Working Group Request For Comments, Jan. 1999, 1-32, XP-002227696.|
|2||Linn, J. et al., "Attribute Certification: An Enabling Technology for Delegation and Role-Based Controls in Distributed Environments", Proceedings 4<SUP>th </SUP>, ACM Workshop on Role-Based Access Control, Oct. 28-29, 1999, 121-130, XP-000958110.|
|3||Park, J.S. et al., "Smart Certificates: Extending X.509 for Secure Attribute Services on the Web", National Information Systems Security Conference, 1999, 22, 337-348, XP-002954616.|
|Citing Patent||Filing date||Publication date||Applicant||Title|
|US7457945 *||Mar 23, 2004||Nov 25, 2008||Dell Products L.P.||System and method for providing a secure firmware update to a device in a computer system|
|US7472274 *||Jun 12, 2003||Dec 30, 2008||Stmicrolectronics S.A.||Authentication of an electronic tag|
|US8181017 *||Sep 8, 2005||May 15, 2012||Nds Limited||Certificate renewal|
|US8436864||Aug 1, 2006||May 7, 2013||Nvidia Corporation||Method and user interface for enhanced graphical operation organization|
|US8436870||Aug 1, 2006||May 7, 2013||Nvidia Corporation||User interface and method for graphical processing analysis|
|US8448002||Apr 10, 2008||May 21, 2013||Nvidia Corporation||Clock-gated series-coupled data processing modules|
|US8452981 *||Mar 1, 2006||May 28, 2013||Nvidia Corporation||Method for author verification and software authorization|
|US8458337||Jun 9, 2008||Jun 4, 2013||International Business Machines Corporation||Methods and apparatus for scoped role-based access control|
|US8607151||Aug 1, 2006||Dec 10, 2013||Nvidia Corporation||Method and system for debugging a graphics pipeline subunit|
|US8701091||Dec 15, 2005||Apr 15, 2014||Nvidia Corporation||Method and system for providing a generic console interface for a graphics application|
|US8788829 *||Aug 17, 2006||Jul 22, 2014||Aol Inc.||System and method for interapplication communications|
|US8850371||Sep 14, 2012||Sep 30, 2014||Nvidia Corporation||Enhanced clock gating in retimed modules|
|US8963932||Dec 18, 2006||Feb 24, 2015||Nvidia Corporation||Method and apparatus for visualizing component workloads in a unified shader GPU architecture|
|US8966272||Dec 31, 2009||Feb 24, 2015||Nvidia Corporation||Method for author verification and software authorization|
|US9225533||Jul 21, 2014||Dec 29, 2015||Aol Inc.||System and method for interapplication communications|
|US9323315||Aug 15, 2012||Apr 26, 2016||Nvidia Corporation||Method and system for automatic clock-gating of a clock grid at a clock source|
|US9471456||May 15, 2013||Oct 18, 2016||Nvidia Corporation||Interleaved instruction debugger|
|US20030233548 *||Jun 12, 2003||Dec 18, 2003||Christophe Moreaux||Authentication of an electronic tag|
|US20050216753 *||Mar 23, 2004||Sep 29, 2005||Dell Products L.P.||System and method for providing a secure firmware update to a device in a computer system|
|US20070162733 *||Jan 6, 2006||Jul 12, 2007||Dell Products L.P.||Secure CMOS|
|US20080005115 *||Jun 30, 2006||Jan 3, 2008||International Business Machines Corporation||Methods and apparatus for scoped role-based access control|
|US20080030511 *||Aug 1, 2006||Feb 7, 2008||Raul Aguaviva||Method and user interface for enhanced graphical operation organization|
|US20080034311 *||Aug 1, 2006||Feb 7, 2008||Raul Aguaviva||Method and system for debugging a graphics pipeline subunit|
|US20080046755 *||Aug 17, 2006||Feb 21, 2008||Aol Llc||System and Method for Interapplication Communications|
|US20080091952 *||Sep 8, 2005||Apr 17, 2008||Nds Limited||Certificate Renewal|
|US20080243856 *||Jun 9, 2008||Oct 2, 2008||International Business Machines Corporation||Methods and Apparatus for Scoped Role-Based Access Control|
|US20090259862 *||Apr 10, 2008||Oct 15, 2009||Nvidia Corporation||Clock-gated series-coupled data processing modules|
|US20100169654 *||Dec 31, 2009||Jul 1, 2010||Nvidia Corporation||Method for author verification and software authorization|
|WO2014195033A1 *||Feb 6, 2014||Dec 11, 2014||Siemens Aktiengesellschaft||Method and computer apparatus for providing authenticated communication for application programs|
|U.S. Classification||713/156, 713/170|
|International Classification||G06F21/00, G06F1/00|
|Cooperative Classification||H04L2209/605, H04L9/3263, H04L9/3271, G06F2221/2103, G06F21/10, G06F21/445|
|European Classification||G06F21/10, G06F21/44A, H04L9/32|
|Aug 6, 2001||AS||Assignment|
Owner name: LIQUID AUDIO, INC., CALIFORNIA
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNORS:BROWNELL, JASON S.;ANSELL, STEVEN T.;DEVINE, PERRY T.;AND OTHERS;REEL/FRAME:012077/0488;SIGNING DATES FROM 20010612 TO 20010625
|May 13, 2003||AS||Assignment|
Owner name: MICROSOFT CORPORATION, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:LIQUID AUDIO;REEL/FRAME:014066/0166
Effective date: 20020927
|Apr 15, 2009||FPAY||Fee payment|
Year of fee payment: 4
|Mar 18, 2013||FPAY||Fee payment|
Year of fee payment: 8
|Dec 9, 2014||AS||Assignment|
Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC, WASHINGTON
Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:MICROSOFT CORPORATION;REEL/FRAME:034541/0001
Effective date: 20141014
|Jun 23, 2017||REMI||Maintenance fee reminder mailed|