until now , java ™ security was all about protecting client systems against malicious servers . in order to support drm in java ™, it is necessary to introduce a new security paradigm : client systems still have to be protected against malicious servers , but now server systems also are protected against malicious clients that , once downloaded high - value contents , may steal and distribute illegal copies . the current java ™ 2 introduces a number of security features , which make it easier to enforce access control of protected resources . particularly , the java ™ 2 permission model is a flexible model that even permits application - defined resources to be added to the access control system . java ™ programs now have the ability to define access restrictions on sensitive resources without requiring the writing of a new securitymanager or modifying the underlying platform . this means that applets downloaded into a browser , or servlets loaded into a java ™- enabled web server or application server , can add resource access controls to a jvm without having to modify the underlying browser or server implementation . one of the notable features of the current java ™ 2 security model is that most of the access control implementation is contained in the java security subsystem . typically , java ™ programs ( such as applications , applets , and servlets ) and components / libraries ( such as packages and beans ) do not need to contain any access control code . when a program wants to add protected resources to the jvm , a method call may be added that will check whether the restricted operation is permissible . the general technique employed in the java ™ 2 security model is to create a guarded object , whereby access to an object , or operations on an object , is restricted by an access control call . fig1 illustrates the components making up the permission architecture of the current java ™ 2 security model 10 . as shown in fig1 , the java ™ 2 security model access control subsystem includes the following conceptual components : a codesource 15 , which is the combination of a set of signers , represented as an array of digital certificates 20 and a code base url 25 , which provides the basis for many permission and access control decisions ; a security policy , which is implemented as a policy file 18 that comprises a number of grant ( permission ) entries 28 which describe the permissions granted to a particular codesource . a grant entry may contain one or more permissions 22 each of which represents the right to access or use a protected resource or guarded object . as shown in fig1 , a protectiondomain 11 is an aggregation of the codesource 20 and the permissions 22 granted for the codesource as specified in the policy database . each class file , e . g ., depicted as class file a 19 loaded into the jvm via a secureclassloader 24 is assigned to a protectiondomain , as determined by the class &# 39 ; codesource . as mentioned , the three legs of jvm security are the classloader , class file verifier , and the securitymanager . prior to java ™ 2 , each application had to write its own subclasses of securitymanager and classloader . java ™ 2 simplified the development process by creating a subclass of classloader called secureclassloader 24 as shown in fig1 . securitymanager no longer is abstract , and can be instantiated or subclassed . most of its methods now make calls to methods in a class called accesscontroller , which provides the access control function on the java ™ 2 platform . since most of the securitymanager methods call accesscontroller , this greatly simplifies the writing of new securitymanager subclasses . to automatically invoke the new security subsystem , a java ™ application is started from a native operating system &# 39 ; s command line with a special argument to indicate that the new access control features should be used . the java ™ runtime creates an instance of secureclassloader 24 , which in turn is used to locate and load the application &# 39 ; s class file . a subclass of securitymanager is created and installed in the java ™ runtime . the application &# 39 ; s main () method is then called with the command line arguments . the purpose of the change in the java ™ runtime for starting java ™ applications is two fold . first , a simple securitymanager is installed in the system that uses the new java ™ security access control subsystem . second , the secureclassloader 24 ( fig1 ) is used to safely and correctly load classes into the java ™ runtime and , particularly , functions to : 1 ) make sure that searching for classes is done in the correct order ; and , 2 ) to create and set the protectiondomain information for classes loaded into the jvm . with respect to the first purpose , the secureclassloader 24 operates as follows : 1 . when the jvm needs a class , the secureclassloader first looks for files referenced by the jvm &# 39 ; s boot class path to see if it is available . files in the boot class path are intended to be the completely trusted classes that are part of the java ™ runtime . for example , all of the code shipped with the jvm is included in the boot class path , and is therefore considered trusted code . 2 . if not found in the boot class path , then the secureclassloader 24 searches the extension class path . an extension is a group of java ™ packages that implement an application program interface ( api ) extending the java ™ platform and are used by application developers to enhance the functionality of the core part of the java ™ platform , without having to increase the size of the core api . standard extensions are , for example , javaservlet , java3d , and javamanagement . extensions must be placed in a java archive ( jar ) file and stored in a specific location in the system . the extension framework in java ™ 2 allows the jvm to use the extension classes in much the same way as the system classes , the only difference being that the boot class path is always searched first , and only if the class is not found in the boot class path will the extension class path be searched . this is done to ensure that system classes are not replaced by less trusted classes . 3 . finally , code may be part of an application class path that points to classes that are available in the host file system , but are not part of the boot class path or the extension class path . classes in the application class path are typically located on the host system &# 39 ; s disk drive ( for example , the workstation or personal computer ), but they are not part of the jvm &# 39 ; s fully trusted runtime classes . as shown in fig1 , with respect to the second purpose , the secureclassloader 24 operates as follows : when the secureclassloader 24 loads a class into the jvm , the code base url 25 and the digital certificates 20 used to sign the class file ( if present ) are used to create a codesource 15 . the codesource 15 is used to locate ( or instantiate ) the protectiondomain 11 for the class which includes the permissions 22 that have been granted to the class . once the class file has been loaded into the jvm , the secureclassloader 24 assigns the appropriate protectiondomain to the class . this protectiondomain information , and in particular the permissions in the protectiondomain , is used in determining access control during runtime . once a java program starts to run , secureclassloader assists the jvm in loading other classes required to run the program . these classes are also assigned the appropriate protectiondomains , based on their codesource . at this point , the permissions granted to each single class are enforced by the securitymanager currently in effect . the securitymanager class in java ™ 2 relies on java . security . accesscontroller for any access control decision . accesscontroller is responsible for verifying that all the classes involved in any executing thread are granted the permission to perform any security - sensitive operation . that is , starting with java ™ 2 , the securitymanager may defer access control decisions to the accesscontroller . determining security policies is much more flexible now since the policy to be enforced by the securitymanager may be specified in a policy file . the accesscontroller provides a simple procedure for giving specific permissions to specific code . the java ™ api still calls the check methods of the securitymanager to enforce system security , but most of these methods call the checkpermission () method in accesscontroller . the checkpermission () method is then responsible for walking back through the thread stack , obtaining the protectiondomains for all the classes on the stack , and verifying that the permission to check is granted . the present invention is directed to the addition of new components that extends the java ™ 2 security architecture to provide fine - grained protection to the digital contents that users have downloaded from a drm server . that is , according to the invention , the base java ™ 2 security architecture is customized to employ a drm securitymanager or drm policy object that enables enforcement of rights acquired by the user . the concepts relating to a transparent digital rights management system as described in commonly - owned , co - pending u . s . patent application ser . no . 09 / 667 , 286 entitled transparent digital rights management for extendible viewers , the whole contents and disclosure of which is incorporated by reference as if fully set forth herein , are applicable to the system of the present invention as now described . fig2 illustrates the main components and high level flows in the drm - enabled jvm system 50 of the present invention . according to the invention , the drm - enabled jvm system 50 provides secure access to protected content by java viewers and players 51 without modifying the java ™ virtual machine ( jvm ) 60 and the application programming interface ( api ) 65 components , collectively known as the java ™ runtime environment ( jre ). as shown in fig2 , the drm - enabled jvm system 50 includes the following additional components : an acquisition tool 70 by which end users can connect with the remote drm server , download protected contents ( previously encrypted by a content preparation tool 74 ), and eventually buy the rights to access such contents ; a launcher 75 which is a trusted , tamper - resistant application for launching the jvm 60 ; a protocol handler 80 which provides a mechanism for indicating to the jvm that some downloadable contents are drm - protected ; and , a drm — security manager 90 — that is responsible for enforcing the digital rights acquired by the user . the operation of each of these components will be explained in greater detail hereinbelow . more particularly , client systems must be provided with an acquisition tool 70 ( which could be a java ™ program as well as a native program ), by which end users can connect with a remote drm content server , depicted as content server ( e - store ) 72 , and download protected contents previously encrypted by a content preparation tool 74 , and eventually buy the rights to access such contents . the acquisition tool interacts with the content server ( e - store ) 72 and a clearing house 76 in order to download the encrypted contents and get the decrypting keys respectively . this technology does not differ in java ™ from what it has already been demonstrated and implemented on other drm platforms ( see , for example , the ibm emms system ). that is , according to known techniques , content is downloaded to the client &# 39 ; s local disk , encrypted with a symmetric key . the symmetric key itself is downloaded together with the content . however , this key is encrypted with the clearing house &# 39 ; s public key , so that only the clearing house 76 can decrypt the symmetric key by using its own private key . the purchased rights associated with content are also stored encrypted on the local disk 78 . as soon as they are downloaded , encrypted contents may stay on the local disk of the client machines , and may be distributed around without any legal restriction . decryption of these contents is prohibited until the end user acquires the ability to access them . in this case , contents will become accessible through the trusted drm - enabled jvm of the invention . as shown in fig2 , the acquisition tool 70 will communicate with the clearinghouse , pass the encrypted symmetric key to the clearinghouse 76 , and ultimately receive a copy of the key that it can decrypt . this communication is performed securely in order to avoid main - in - the - middle or “ sniffer ” attacks . once the symmetric key is obtained , the trusted acquisition tool decrypts the content , immediately re - encrypts it with a new symmetric key , and stores it encrypted on the java client system . the new symmetric key is generated on the fly by the system 50 based on some secret features found on the client machine hardware . in addition to the additional security mechanisms implemented in the jvm to ensure proper drm support , the drm - enabled jvm 50 of the present invention is provided with a trusted , tamper - resistant launcher application 75 for activating the jvm 60 . specifically , at jvm startup , the launcher application preserves the integrity of the jvm , its dlls , all the java ™ libraries , and verifies all of the security configuration files . to provide this functionality , the launcher employs a standard means of message digest verification . in addition , it verifies that only trusted packages are installed in the extension framework . in order to avoid an instance of malicious users replacing jvm components after their verification but before their loading , the loading and verification of all the jvm components is forced at jvm startup . preferably , the launcher trusted application 75 is written in native code and properly obfuscated , and must be installed on client systems in order for these to be drm - enabled . in fact , if the jvm is not started through the launcher , it will still work as a traditional jvm , but will refuse to activate its drm component , making it impossible to access drm - protected contents . once started by the launcher , the drm - enabled jvm 50 works as a regular jvm until the end user indicates that they want to access some protected contents . typically , java ™ players , as well as native players , offer the option to access contents by specifying the url at which such contents reside . this option can be specified in a text box as well as within the & lt ; applet & gt ; tag of an html page . therefore , a possible way to indicate to the jvm that some contents are drm - protected is to extend the jvm with a java ™ drm protocol handler 80 . particularly , the drm protocol handler is responsible for checking the rights that the user has acquired . if the user has acquired the right necessary to access protected contents , the drm protocol handler will access the contents . otherwise , the drm protocol handler 80 will immediately refuse to access the contents right away . in this case , it is likely that it will display a drm jvm message to the user , saying that the rights to access the contents have not yet been acquired . if the right to access those contents has been acquired , the drm protocol handler will activate its internal drm decrypting component 85 . the drm decrypting component 85 is an internal component of the drm protocol handler . it has the responsibility for accessing the contents , decrypting them , and serving them to the drm protocol handler . in order for the decrypting component to work , it is necessary to install support for decryption in the jvm . by default , java ™ offers support for message digests and digital signatures , but no support for encryption . therefore , a drm - enabled jvm must have been enhanced with the java cryptography extension ( jce ). by default , the jce packages provided by sun microsystems ™ or ibm ™ includes a framework where cryptographic service providers ( csps ) can be plugged in , as well as a csp that supplies the implementation of some encryption / decryption algorithms . there should be no restrictions in terms of the framework and the csps that can be installed on top of the jvm , as long as these packages are certified ( as they must be recognized by the launcher ) and they supply the implementation of the same encryption / decryption algorithms used by the drm server to encrypt the contents . digital rights ( such as the right to print , copy and paste , etc .) in the drm - enabled jvm 50 of the invention , are typically enforced by the drm securitymanager 90 and / or the drm policy object 98 after contents have been decrypted by the decrypting component 85 and passed on to the drm protocol handler 80 . however , the right to play protected contents should be enforced by the drm protocol handler 80 itself . in other words , the decrypting component should be activated only if the right to display protected contents has been previously acquired . as mentioned , the only entity that is not trusted in this simplified system is the end - user . therefore a client registration system must be established . thus , after installing the drm system on the client machine , and before the client can perform any transactions , the client has to register with the drm server 72 . besides typical registration procedures to any online store , which result in the generation of a user id , password , and possibly a client profile for accessing the web site and ordering content , the drm server 72 receives from the drm client a unique public key certificate . this public key certificate is generated by a registration application , which is triggered on the client side . the counterpart private key of this public key is maintained securely protected by the client drm system . the secret used to protect that key is generated based on unique features of the client machine , and is never stored on disk . the code that generates this secret and uses it is part of a drm library , which is used by the different drm client - side components , such as the trusted content handler , the launcher , and the registration application . the code of this drm library is preferably obfuscated and well - protected against tampering or debugging attacks . any content directed to this client is protected using the public key which is stored on the drm server . preferable , public key encryption is applied only to metadata such as the rights files or the content map in order to avoid the overhead of asymmetric encryption / decryption with each content download . rights specification for protected packages containing large numbers of individual content items — e . g ., courseware , photography collections , literature anthologies — presents issues not addressed by existing rights management systems . first of all , there must be the ability to specify rights at a fine granularity . this is important in enabling content owners and distributors to offer consumers a variety of ways to purchase content in these large packages , and in giving consumers choice in how they purchase it . but rights specification must also be convenient — it should not be necessary to specify rights individually for each item of content . finally , there should be an efficient run - time mechanism , both in speed and in storage requirements , for associating a particular item of content with its corresponding set of rights . meeting these requirements is achieved with the system described herein . a complete rights specification for a protected package is comprised of ( 1 ) one or more rights files , ( 2 ) a key - table file , and ( 3 ) a content - attributes - table file . these files are collected together in one directory , the directory having the same name as the package name . rights files are text files with the “. ini ” extension . a package may have multiple rights files but must have at least one . the format of a rights file is a series of lines , each line granting or denying one right . a key table is a text file with the name “ keytable . ini ” as shown in the following example key table : [ version ] 0 . 1 [ parameters ] algorithm : des mode : cbc padding : pkcs5padding algorithmparameters : param . par numberofkeys : 3 [ keys ] key0 . key key1 . key key2 . key in the example above , keys and algorithm parameters are specified in binary format in separate files , key0 . key , key1 . key , key2 . key , and param . par respectively . alternately , keys and algorithm parameters could be specified in hexadecimal format , and stored for example into the key table itself . in either case , the packager may verify the number of digits of the keys and the parameters ( both depending on the algorithm used ) before using them . a content - attributes table associates content items with rights files and decryption keys , in a compact and efficient way . conceptually , it is structured as shown below : a content - attributes table is a text file with the name contentattrs . ini . the role of the content - attributes table is to assign rights files and decryption keys to individual content items in a compact and efficient way . following is an example content - attributes table : * rightsfile : default_rights . ini keyid : 0 [ andrew_jackson . htm ] rightsfile : aj_rights . ini keyid : 1 [ andrew_jackson_files /*] rightsfile : aj_rights . ini keyid : 2 [ jacksons_hermitage . htm ] rightsfile : jh_rights . htm keyid : 3 [ jacksons_hernitage_files /*] rightsfile : jh_rights . htm keyid : 4 the content - attributes table is a series of content - path specifiers ( within ‘[‘ and ’]’ brackets ) followed by rights - file and key assignments . content - path specifiers are relative to the parent directory of the course . thus , for a file named “ d :\ packages \ rmhttp_package_root_db2demo \ index . html ,” the content - path specifier in the content - attributes table is “ index . html .” so that not every file in a package requires its own specification line , the content - attributes table allows hierarchical specification . in the sample above , “[ andrew_jackson_files /*]” specifies all the files in the directory “ andrew_jackson files .” in this particular implementation , the “*” element is only used to indicate all files in a directory ; it cannot be used as a general wildcard . that is , *. html cannot be used to indicate all files with the html extension . it may be noted that the directory separator used is “/”, following url syntax . it can be seen in the sample above that a given a file path name may match more than one path specification . for example , andrew_jackson . html will match both [*] and [ andrew_jackson . html ]. the rule is that specification with the longest matching prefix is chosen . this makes it possible to assign a default rights file and then override it for selected files . key ids refer to the index of the key in the key table . the index is zero - based . since prefix matching is strictly on the basis of whole path elements , the time complexity of any one rights - file and key lookup ( i . e ., given a file name , the time required to look up the associated rights file and decryption key ) is linear in the length , in path elements , of the file name . for example , “[ index . html ]” has one path element , and “[ andrew_jackson files /*]” has two . since the depth of a tree of n nodes is proportional to log 2 ( n ), the time complexity of rights - file and key lookup in a package of n content items is o ( lg n ). after the rights specification files — the rights files , a key table , and a content attributes table — have been prepared , a packaging tool encrypts the content files for distribution , using the keys specified in the key table and the content attributes table . the rights specification files are also encrypted with a secret key , and remain encrypted while on the user &# 39 ; s system . ( they may or may not undergo a transcription when they are first copied to a user &# 39 ; s system .) because the names of the content files and rights specification files , and their organization in directories , is not protected against tampering , some users may attempt to circumvent the rights management system by renaming rights files and / or content files . seeing a file named “ norights . ini ” and a file named “ allrights . ini ”, a user may be tempted to delete the norights . ini file , then make a copy of the allrights . ini file and name it to norights . ini . the obvious intent would be that any content assigned the rights in norights . ini would effectively have the rights in allrights . ini . to prevent this , the packager may insert into each rights specification file and content file , at encryption time , its name . ( for rights specification files , the name is relative to the package &# 39 ; s rights - specification directory ; for content files , the name is relative to the content root directory .) when one of these files is accessed , the name used to access the file is checked against the name embedded in the file itself . if the names do not match , the file is not decrypted . once contents have been decrypted by the decrypting component and passed on to the drm protocol handler , the jre implements a mechanism to enforce the rights acquired by the user . it has been demonstrated that this may be done in at least two different ways : by instantiating a drm securitymanager at run time , or by modifying the policy object instantiation at jvm startup , requiring that a drm policy object be created . as shown in fig2 , the drm securitymanager component 90 is an extension of the default securitymanager that is part of the standard java ™ api and is responsible for enforcing the digital rights acquired by the user , except the right to play , which is enforced by the drm protocol handler itself . the drm securitymanager 90 is invoked by the drm protocol handler as soon as protected contents have been accessed by the drm protocol handler and decrypted by the decrypting component . should the jvm refuse the installation of the drm securitymanager , accessing the protected contents will abort . thus , the main function of the drm sm component is to enforce the rights associated with protected content by disallowing players from performing any operations that may lead to a rights violation . this java class subclasses the original security manager of the jre , and prevents any further subclassing of itself , so it cannot be overridden . by default , all security sensitive operations , such as input / output , opening sockets to communicate with external entities , etc ., are trapped to be authorized by the security manager . the drm securitymanager is capable of understanding the rights acquired by the user . typically , such rights are encoded on the local file system and encrypted with a secret key . therefore , the drm securitymanager must be able to access or calculate the decrypting key , and use the decrypting functions of the jce to access the rights . rights are , associated with pieces of contents , and it must be possible to have different pieces of contents with different rights loaded at the same time . therefore , as soon as a piece of content is accessed , rights must be calculated for it , and must be enforced by the drm securitymanager . with java ™ 2 , the drm securitymanager 90 is a fully functional resource level access control facility with only one method call , checkpermission (), which takes a java . security . permission object as a parameter . for compatibility , the other check methods are still available , but now answer the question using the new permission and policy file model by turning the request into a permission and calling checkpermission (). all of the check methods can still be overridden , if necessary . as depicted in fig3 , in order to enforce rights , the drm securitymanager 90 breaks the connections with the accesscontroller 95 for every permission that is relevant to a digital right . in other words , the securitymanager 90 checks methods relevant to a digital right will be overwritten by the drm securitymanager subclass , and the accesscontroller . checkpermission () method will not be invoked for that particular permission . this way , accesscontroller . checkpermission () will not walk through the stack frames of the current thread 96 , obtaining the protectiondomains for every class in the stack . in an example scenario , the following piece of code illustrates how the drm securitymanager component 90 may override the checkpermission () method of its superclass , securitymanager , and use the following drm logic to establish if the permission to print is granted or not : with this behavior , the drm server is protected against malicious clients . in fact , in order to print protected contents , a user on a client system will modify one of the policy configuration files by adding a grant entry similar to the following : however , the way the drm securitymanager overwrites the checkpermission () method grants that the security policy will not be consulted when a print operation is attempted . all the drm logic resides in the drm securitymanager , and any changes and permissions granted in the policy files will not have any effects when the drm securitymanager is in place . thus , as fig4 conceptually depicts , even if the right to print has not been acquired , the drm securitymanager 90 will deny it , no matter what the policy object 18 ′ currently in effect recommends . notice that this security configuration would be entirely compromised if the end user were able to instantiate a new securitymanager and replace the existing drm securitymanager . therefore , the drm securitymanager &# 39 ; s checkpermission () method must also take care of forbidding the creation of a new securitymanager . similar care should be taken for other permissions , which at first sight might not appear relevant to a drm scenario . for example , it is advisable to forbid opening socket connections , since through a socket connection decrypted contents could be easily transferred to another machine and illegally copied . in addition , the drm securitymanager should prevent changing the jvm security configuration , creating of a new classloader ( which could be as dangerous as granting allpermission ), invoking native methods , etc . enforcing digital rights with a customized drm securitymanager allows the jvm to be used as a regular jvm as well as a drm - enabled jvm according to the needs . in fact , a new drm securitymanager instance is created only when drm - protected contents is invoked . before that , a default securitymanager instance ( or another user - defined securitymanager ) is active , and the security of the entire jvm is imposed by that securitymanager . only when protected digital contents are loaded into the jvm will the drm securitymanager be instantiated to enforce the rights . however , extreme care must be taken against all the possible attacks that could be run against this solution . for example , many permissions that at a first sight do not look like drm - related permissions are potentially very dangerous if the drm securitymanager does not prevent them . for example , the permission to create and set a new securitymanager would compromise the security of the entire system if a malicious user could instantiate a new securitymanager that replaces the drm securitymanager . similarly , it is possible to bypass any securitymanager control by running native code . while a drm securitymanager may implement a very strict security policy that prevents all these possible attacks from being run , it is likely that the capabilities of programs running on the resulting jvm will be very limited . a limitation in this approach may occur if the securitymanager currently in effect when drm protected content is going to be loaded prevents a new securitymanager from being installed . in this situation , the drm securitymanager cannot be instantiated , and the drm protocol handler will typically refuse to activate its decrypting component . in this case , protected content will not be displayed on the client system until the current securitymanager will allow the drm securitymanager to replace it . another way the drm - enabled jvm may enforce the digital rights that the end user has acquired is by using a customized policy object 98 as shown in fig2 . as described herein , the default policy implementation in java ™ 2 is file based . however , the java ™ 2 api offers an abstract policy class that application developers may overwrite to provide their own policy implementation . a known problem in the java ™ platform is that protectiondomains are cached as soon as they are created . therefore , changing the policy and refreshing will not take any effect over protectiondomains that have already been instantiated . for this reason , the drm - enabled jvm that chooses to enforce rights through a drm policy object will have to instantiate the drm policy object at jvm startup . enforcing the rights by using a drm policy object is an enhancement based on the java ™ 2 security architecture . in fact , as soon as a class is loaded into the jvm , a protectiondomain is assigned to that class based on the class &# 39 ; codesource . the protectiondomain information is then retrieved by the accesscontroller when its checkpermission () method , walking back though the stack frames of the current thread , makes sure that every protectiondomain on the tread &# 39 ; s stack implies the necessary permission . by forcing the protectiondomain information to reflect the rights that the user has acquired , the drm - enabled jvm will prevent unscrupulous users from misappropriating high - value digital contents . instantiating a customized drm policy object 98 requires the presence of a drm policy object instantiator hidden within the jvm and obfuscated . the drm policy object instantiator must be capable of understanding the rights acquired by the user . typically , such rights are encoded on the local file system and encrypted with a secret key . therefore , the drm policy object instantiator must be able to access or calculate the decrypting key , and use the decrypting functions of the jce to access the rights . along with enforcing the rights , the drm policy object will have to impose some other security restrictions that at first sight might not appear relevant to a drm scenario . as already noted , the security configuration would be entirely compromised if the end user were able to instantiate a new securitymanager , since a new securitymanager could forbid any policy consultation . therefore , the drm policy object must also take care of forbidding the creation of a new securitymanager . similar care should be taken for other permissions . for example , it is advisable to forbid opening socket connections , since through a socket connection decrypted contents could be easily transferred to another machine and illegally copied . in addition , the drm policy object should prevent changing the jvm security configuration , creating of a new classloader ( which could be as dangerous as granting allpermission ), invoking native methods , etc . the drm policy object solution represents a very robust way to enforce digital rights in a drm - enabled jvm . in fact , its action is concentrated at a very low level in the java ™ 2 permission architecture . in general , the securitymanager currently in effect relies on accesscontroller for any access control decisions , and in turn , accesscontroller is responsible for getting the protectiondomains of all the classes on the thread stack to verify that the permission to check is actually implied by every protectiondomain . since protectiondomains are instantiated based on the policy object currently in effect , a drm policy object may drive the security of the entire jvm in such a way that drm - protected contents cannot be accessed illegally . the drm policy object is still responsible for preventing any new securitymanager from being instantiated , since a malicious securitymanager might disregard any policy configuration currently in effect . similarly , the creation of new classloaders should be avoided , and native code invocations should be forbidden in addition , the aforementioned known problem in the jvm implementation — the protectiondomain caching — forces the drm policy object to be instantiated at jvm startup . a flexible approach where the drm policy object is invoked on demand when drm - protected contents are loaded will not be a secure solution until a protectiondomains refreshing mechanism is implemented . therefore , the approach of imposing rights management with a drm policy object currently lacks the flexibility of a drm - on - demand solution . nonetheless , once solved the general problem of the protectiondomain information caching , this solution will present the best advantages since it allows merging rights with policy file information . returning to fig2 , the drm protocol handler 80 is a fundamental component in the drm - enabled jvm . one risk is that this component is misappropriated by a malicious user , and placed inside a compromised jvm that does not obey to the rights enforcement . another risk is that the jvm is started ( deliberately or otherwise ) without using the launcher 75 , which is responsible for verifying the integrity of the jvm itself . in both these scenarios , the drm protocol handler and its decrypting component would run inside a jvm whose integrity could not be ascertained . this kind of problem is solved by the out - of - process code identity verification , a sophisticated security mechanism described in commonly - owned , co - pending u . s . patent application ser . no . 09 / 667 , 286 , the whole contents and disclosure of which is expressly incorporated by reference as if fully set forth herein . simply stated , this mechanism makes sure that the drm protocol handler 80 and the launcher 75 exchange a secret every time the drm protocol handler is invoked . this secret is computed independently by each of the launcher and the protocol handler applying the same scrambling algorithm to jvm process - specific information , e . g ., process id or process creation time , which cannot be forged without compromising the operating system . if the secret held by the drm protocol handler is different from the secret held by the launcher 75 , and in particular if the secret held by the launcher 75 does not exist at all ( which is the case if the jvm was started without the launcher ), then the drm protocol handler will refuse to activate its decrypting component , and contents will be displayed encrypted . fig5 ( a ) and 5 ( b ) provide a block diagram depicting the overall process flow 100 for enabling digital rights management according to the invention . as shown at a first step 101 , the launcher application 75 authenticates the jre ( jvm and java runtime libraries ), e . g ., ensures that the jvm may be trusted ( no malicious code ). if the jre can not be authenticated , then the launcher process aborts without launching the drm jvm as shown at step 103 . otherwise , at step 105 , the launcher application launches the jvm and at step 106 , the jvm loads the particular application , e . g ., media player such as a viewer , printer , etc . then , at step 108 , the application will attempt to access a protected resource which may be an encrypted file comprising the protected content . in response , the jre at step 110 will load the appropriate drm protocol handler unit ( ph ) associated with the protocol indicated by the name of the url being accessed ( e . g ., rmhttp ://***). then , at step 112 , the drm ph unit will load the rights set associated with that particular resource . further details regarding the loading of rights are described herein with respect to the process flow 150 of fig6 . continuing at step 120 , fig5 ( b ), a decision is then made as to whether the particular user has the right to play , view , listen or otherwise access the protected content . if no rights are detected , then the process aborts at step 122 . if the user has rights associated with this content then the process continues to step 125 where the drm ph unit initializes the drm security manager ( sm ), decrypts the rights files and creates objects to be passed to the sm comprising the rights set that are to be enforced as determined for that user . at step 127 , a determination is made as to whether the drm sm was successfully initialized , and if not , the process terminates at step 128 . otherwise , the process continues at step 130 where the drm ph initializes an input stream object for the application and a decryption filter that may be utilized in order to view or listen or play the contents . the encrypted contents are thus decrypted by the decryption filter and the drm ph returns the input stream object to the application as indicated at step 135 . it should be understood that the player application does not know that the content was ever encrypted as the input object stream is decrypted in real time . as described above with respect to step 112 , fig5 ( a ), the drm ph loads the rights set associated with the protected content . a detailed description of this process 150 is now provided with respect to fig6 . as shown in fig6 , a first step 152 is to ensure that the launcher has authenticated the jre with the process terminating at step 153 if the jre could not be authenticated as described above . then at step 155 , the drm ph resolves the resource url in order to determine the protected resource , and particularly , the content filename cf and the content map cm of that resource . then , at step 158 , the content map is decrypted using a hidden private key ( it should be understood that the corresponding public key is at the server side content provider ). particularly , the private key is re - generated from pieces of information that are hidden and are unique to the client . the key table also can only be decrypted using the hidden private key , and hence the symmetric keys are re - generated for decrypting the content from pieces of information that are hidden and are unique to the client . next , at step 160 , the cm is used to map the cf into a corresponding rights file ( rf ) and key id such as described above with regard to the content - attributes table , and the rf is decrypted using the hidden private key at step 163 . finally , at step 165 , the decrypted rf is parsed and the particular rights set is loaded for the security manager to enforce in the manner as described herein . it should be understood that the process described herein with respect to fig5 ( a )- 5 ( b ) is repeated for every url or link having protected content to be accessed . while the invention has been particularly shown and described with respect to illustrative and preformed embodiments thereof , it will be understood by those skilled in the art that the foregoing and other changes in form and details may be made therein without departing from the spirit and scope of the invention which should be limited only by the scope of the appended claims .