{"id":2541,"date":"2012-04-21T17:21:34","date_gmt":"2012-04-21T13:21:34","guid":{"rendered":"http:\/\/blog.denivip.ru\/?p=2541"},"modified":"2013-08-05T14:11:16","modified_gmt":"2013-08-05T10:11:16","slug":"flash-access-3-0-more-features","status":"publish","type":"post","link":"http:\/\/blog.denivip.ru\/index.php\/2012\/04\/flash-access-3-0-more-features\/?lang=en","title":{"rendered":"Flash Access 3.0: More Features"},"content":{"rendered":"<p><center><a href=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2012\/04\/VideoDRM.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2012\/04\/VideoDRM.jpg\" alt=\"Video DRM\" title=\"Video DRM\" width=\"455\" height=\"259\" class=\"alignnone size-full wp-image-2490\" srcset=\"http:\/\/blog.denivip.ru\/wp-content\/uploads\/2012\/04\/VideoDRM.jpg 455w, http:\/\/blog.denivip.ru\/wp-content\/uploads\/2012\/04\/VideoDRM-300x170.jpg 300w\" sizes=\"(max-width: 455px) 100vw, 455px\" \/><\/a><\/center><\/p>\n<p>Today, we are happy to publish a post on the new features of Adobe Flash Access 3.0. This is sort of a belated attempt to compensate certain gaps in the Adobe&#8217;s documentation. However, as soon as the next generation of Adobe Flash Access supporting iOS will have been announced, the basic features of the current release will become even more important. <!--more--><\/p>\n<p><b>Introduction<\/b><\/p>\n<p>Adobe Flash Access 3.0 DRM was released in the second half of 2011, evolving from Adobe Flash Access 2.0. The new version of Flash Access introduced new advanced features, such as device domains, license preparation, encryption key rotation, clock sync, etc. So, Adobe has been progressing in the following main directions: prepare a product for performance sensitive projects and extend the range of business models supported.<\/p>\n<p>The Flash Access 3.0 ecosystem includes:<\/p>\n<ul>\n<li>Flash Access Java SDK, with a reference implementation of the license server and command line tool<\/li>\n<li>Flash Player 11 for Windows 32-bit<\/li>\n<li>AIR 3 for Windows 32-bit<\/li>\n<li>Flash Player 11 for Android 2.2,2.3,3.0,3.1 and 3.2<\/li>\n<li>AIR 3 for Android 2.3,3.0 and 3.1<\/li>\n<li>AIR 3 SDK that can create Action Script applications for desktops and Android devices<\/li>\n<li>Test video player<\/li>\n<\/ul>\n<p><strong>Flash Access SDK<\/strong><br \/>\nWith the advent of Flash Access 3.0, two types of SDK are offered to developers:<\/p>\n<ul>\n<li>Flash Access Core SDK provides Flash Access 2.0 functionality and includes basic features of Flash Access 3.0, such as key rotation, domain support, forced client\/server syncing, etc.<\/li>\n<li>Flash Access Professional SDK enhances the features of Flash Access Core SDK  by generating license files to be hosted on a Web server and embedding licenses into encoded content.<\/li>\n<\/ul>\n<p><b>Flash Access SDK Features<\/p>\n<p>Key Rotation<\/b><br \/>\nTo strengthen encrypted content protection, key rotation has been introduced in Flash Access 3.0. With key rotation, individual blocks of content are encoded by different keys, to substantially enhance content protection.<br \/>\nTo enable &quot;Key Rotation&quot; feature in the AdobePackager encryption utility, set &quot;encrypt.keys.rotation.enable = true&quot; in the &quot;flashaccesstools.properties&quot; configuration file. The keys will be generated automatically and change every 15 minutes.<\/p>\n<p>To encrypt content with custom keys, list the keys in flashaccesstools.properties, as follows:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/><\/div><\/td><td><div class=\"text codecolorer\">encrypt.keys.rotation.key.1 = 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10<br \/>\n#encrypt.keys.rotation.key.n = 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Custom keys will be rotated.<\/p>\n<p><b>Devide domains<\/b><br \/>\nTo share a voucher between multiple devices, Flash Access 3.0 allows for grouping devices into domains. The DRM voucher is generated by the Flash Access license server and contains video content decryption key. Domains can help reduce load on the license server, as a single voucher request is sufficient to play back content on multiple devices.<br \/>\nNote that, to support domains you have to create a separate certificate. In contrast to other certificates (License Server, Packager or Transport), a domain certificate is self-signed or issued by the user CA. <\/p>\n<p>The DRMManager.storeVoucher() function is used to enable sharing of a voucher by multiple devices. If your deployment supports this, you can use the DRMManager.addToDeviceGroup() method to register multiple devices within a group. If a group has one computer with a valid voucher assigned to a domain and granting the right to play back particular content, AIR application can retrieve serialized DRM vouchers using the DRMVoucher.toByteArray() method. To import such vouchers to devices,<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">DRMManager.storeVoucher()<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>can be used.<\/p>\n<p><b>Licenses<\/b><br \/>\nLicense support in Flash Access 3.0 has changed. In Flash Access 2.0, root and leaf licenses were assigned to the playback device. Now, in order to embed a license into encrypted content streamed to a domain, only a root license requested from the license server is assigned to a playback device.<\/p>\n<p><b>Client\/Server Syncing<\/b><br \/>\nWhile requesting a license, Flash Access 2.0 could validate client clock against the server clock. However, it had no mechanism for mandatory clock validation and syncing between the client and the server.<br \/>\nNow, to create a policy with mandatory syncing, use a policy management utility called AdobePolicyManager,  specifying parameter &quot;-sync <name\/value pairs>&quot;. Then, add a new rule to your policy using Flash Access SDK:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/><\/div><\/td><td><div class=\"text codecolorer\">&nbsp; &nbsp; try{<br \/>\n&nbsp; &nbsp; &nbsp;SyncFrequencyRequirements syncReq = new SyncFrequencyRequirements(3600);<br \/>\n&nbsp; &nbsp; &nbsp;play.setSyncFrequencyRequirements(syncReq); &nbsp;<br \/>\n&nbsp; &nbsp; }catch(Exception ex){System.out.println(ex);}<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>Syncing messages are necessary to ensure secure content playback, since they are responsible for client clock validation against the server. Subsequent clock syncing might be mandatory or optional. If syncing fails in case of mandatory syncing, content playback is stopped until Flash Access server is available.<\/p>\n<p><b>Hosting of pre-generated licenses on a Web server<\/b><br \/>\nWith Flash Access 3.0 (i.e., Flash Access Professional SDK), you can create licenses for certain playback devices in advance. You can host such licenses on a common Web server to serve client requests. To support pre-generated licenses, install Flash Player 11 and Adobe AIR 3.0 (or later versions of these products).<br \/>\nTo create a license file, do the following:<br \/>\no\tEncrypt your content with the AdobePackager utility, specifying the required parameters in the flashaccesstools.properties configuration file, e.g.:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/><\/div><\/td><td><div class=\"text codecolorer\">&nbsp;java -jar AdobePackager.jar pr.f4v proff.f4v -p ad-policy.pol -c flashaccesstools.properties<br \/>\nLicense ID: 3E7680FE-5461-3A99-AC62-59D04964701D<br \/>\nPackaging timestamp: Tue Mar 06 19:34:52 MSK 2012<br \/>\nProcessing time: 10441 ms<br \/>\nSUCCESS<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>On license request, the license server validates device certificate using the<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">getMachineCertificate().GetEncoded()<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>function. Save the received device certificate in a file, e.g.:  &quot;mcert.der&quot;<br \/>\no\tCreate a leaf license to play back content on the device, for example:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">java -jar AdobeLicenseGenerator.jar -c flashaccesstools.properties -m &nbsp;proff.f4v.metadata -o -r mcert.der &nbsp; -leaf leaf-license<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/><\/div><\/td><td><div class=\"text codecolorer\">Adobe(R) Flash Access License Generator<br \/>\nversion 3.1.0435<br \/>\n=======================<br \/>\nSigning credentials: trial-pro.pfx<br \/>\nLicense type: Leaf<br \/>\nDestination file: D:\\....\\libs\\leaf-license<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/><\/div><\/td><td><div class=\"text codecolorer\">Generated Leaf license:<br \/>\nLicense Server: http:\/\/127.0.0.1\/flashaccess<br \/>\nLicense ID: BFCB5B72-4387-39D9-BE2F-6C7DD42BE693<br \/>\nPolicy ID: 2C5843B7-1B4F-3ABC-B86B-3F09EC9BA4F3<br \/>\nLicense End Date: Mon May 28 03:59:59 MSD 2012<br \/>\nUnlimited License Caching<br \/>\nRight: Play<br \/>\nRecipients:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; Public Key Id: b3e397b821fee63886d6dba0c935500cd5a67c1a<br \/>\nSUCCESS<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>o\tPut a leaf license file to a Web server to serve playback requests from a given device.<br \/>\no\tRequest a pre-generated license and place it to a local cache of Flash Player LSO (Local Shared Object) by using the<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">DRMManager.storeVoucher()<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>ActionScript function. If the license is not found on a Web server or in the local LSO cache, the license is requested repeatedly from the Flash Access server.<\/p>\n<p><b>License Embedding into Encrypted Content<\/b><br \/>\nUsing Flash Access 3.0 (Flash Access Professional SDK), you can embed pre-generated licenses into encrypted content.  This way the user can still play back the content, even if the Flash Access license server is not available.<br \/>\nTo embed pre-generated license in the encrypted content, run the AdobeLicenseEmbedder utility with the name of encrypted content and the name of a previously created license as arguments, for example:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/><\/div><\/td><td><div class=\"text codecolorer\">java -jar AdobeLicenseEmbedder.jar proff.f4v proffpre.f4v -l leaf-license <br \/>\nAdobe(R) Flash Access License Embedder<br \/>\nversion 3.1.0435<br \/>\n=======================<br \/>\nLicense file: leaf-license<br \/>\nSource file: D:\\....\\libs\\proff.f4v<br \/>\nDestination file: D:\\....\\libs\\proffpre.f4v<br \/>\n&amp;quot;proffpre.f4v&amp;quot; created successfully.<br \/>\nSUCCESS<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>At playback, no license is requested from the Flash Access server, as the license is embedded into content.<\/p>\n<p><strong>Restore Factory Defaults<\/strong><br \/>\nWhen the user reverts to factory defaults, device certificate is removed from the operating system. To continue protected content playback, Flash application has to re-register the device at the Adobe Individualization Server. If Flash Access clients receive an expired license (or a pre-generated license), they would reject it as the license has been created for an earlier device ID version.<\/p>\n<p>For more details on Flash Access, please visit Adobe&#8217;s site, article &ldquo;Using digital rights management&rdquo;.<\/p>\n<p><b>Network and Security<\/b><br \/>\nHaving installed Flash Access, please make sure that the system is secure.<br \/>\nTo protect Flash Access server from unauthorized access and compromising, set up a reverse proxy in the demilitarized zone (DMZ). Reverse proxy will accept requests from the Web and forward them to the Flash Access server. Reverse proxy is designed to prevent direct client access to the Flash Access server.<\/p>\n<p><strong>Enabling Access to the Server<\/strong><br \/>\nIncoming Requests Flash Access 3.0 License Server accepts requests over HTTP and processes them at the following basic Web interfaces:<\/p>\n<ul>\n<li>..\/flashaccess\/getServerVersion\/v3\tresponds to customer requests, returning Flash Access License Server version<\/li>\n<li>..\/flashaccess\/authn\/v1\tserves requests for login\/password authentication<\/li>\n<li>..\/flashaccess\/authn\/v3\tserves requests for login\/password authentication<\/li>\n<li>..\/flashaccess\/license\/v1\tserves license requests<\/li>\n<li>..\/flashaccess\/license\/v3\tserves license requests<\/li>\n<li>..\/flashaccess\/sync\/v3\tserves client-server syncing requests<\/li>\n<li>..\/flashaccess\/domain\/v3\tserves domain registration requests<\/li>\n<li>..\/flashaccess\/dereg\/v3\tserves domain deregistration requests<\/li>\n<\/ul>\n<p>Outgoing Requests To ensure proper Flash Access operation, please provide access to Adobe&#8217;s certificate revocation lists (CRL):  <\/p>\n<ul>\n<li>http:\/\/crl2.adobe.com\/Adobe\/FlashAccessRootCA.crl<\/li>\n<li>http:\/\/crl2.adobe.com\/Adobe\/FlashAccessIntermediateCA.crl<\/li>\n<li>http:\/\/crl3.adobe.com\/ AdobeSystemsIncorporatedFlashAccessRuntime\/LatestCRL.crl<\/li>\n<li>http:\/\/crl2.adobe.com\/Adobe\/FlashAccessIndividualizationCA.crl<\/li>\n<\/ul>\n<p>If access to these lists is disabled, the server will no longer accept incoming requests from the clients.<\/p>\n<p><strong>Enable Encryption in Flash Media Server 4.5.1<\/strong><br \/>\nStarting with FlashAccess 2.0, the DRM can integrate with Flash Media Server 4.0. Starting with FlashAccess 3.0, integration with Flash Media Server 4.5.1 is provided.  This enables Flash Media Server with HTTP DS encrypted streaming, eliminating the possibility of unauthorized interception and recording of data.<\/p>\n<p>To enable stream encryption in FMS 4.5.1, do the following:<br \/>\n1.\tEdit the &quot;rootinstall\/applications\/livepkgr\/events\/_definst_ \/liveevent \/Event.xml&quot; configuration file by adding the following parameters:<\/p>\n<div class=\"codecolorer-container text default\" style=\"overflow:auto;white-space:nowrap;width:540px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/><\/div><\/td><td><div class=\"text codecolorer\">&amp;lt;Recording&amp;gt;<br \/>\n&nbsp; &nbsp; &nbsp; &amp;lt;ContentProtection enabled=&amp;quot;true&amp;quot;&amp;gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &amp;lt;ProtectionScheme&amp;gt;FlashAccessV3&amp;lt;\/ProtectionScheme&amp;gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &amp;lt;FlashAccessV3&amp;gt;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &amp;lt;\/FlashAccessV3&amp;gt;<br \/>\n&nbsp; &nbsp; &nbsp;&amp;lt;\/ContentProtection&amp;gt;<br \/>\n&nbsp; &nbsp; &amp;lt;\/Recording&amp;gt;<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>After the parameters are added and streaming starts, the following files will emerge in rootinstall \/applications\/ livepkgr\/streams\/_definst_ \/&#8230;\/ directory:<br \/>\n\u2022\t.bootstrap &ndash; contains information needed for quick content playback launch  , and specifies the location of content and the segment table, etc.<br \/>\n\u2022\t.control &#8212; contains information necessary for Live Packager.<br \/>\n.<br \/>\n\u2022\t.drmmeta &ndash; additional details of Flash Access files<br \/>\n\u2022\t.f4f &ndash; encrypted content<br \/>\n\u2022\t.f4x &ndash; index file<br \/>\n\u2022\t.meta &#8212; contains metadata, such as bit rate, window size, etc.<br \/>\nTo enable key rotation, add the following parameters to &quot;rootinstall\/applications\/livepkgr\/events\/_definst_\/liveevent\/Event.xml&quot;:<br \/>\n\u2022\tEnableKeyRotation  &#8212; enable key rotation. By default, key rotation is disabled &#8212;<br \/>\n<EnableKeyRotation>true<\/EnableKeyRotation><br \/>\n\u2022\tKeyRotationInterval  &#8212; key rotation interval. Default interval is 15 minutes.<br \/>\n<KeyRotationInterval>900<\/KeyRotationInterval><br \/>\n\u2022\tKeyRotationFilePath  &#8212; user key file<br \/>\n<KeyRotationFilePath>rotationkeyfile<\/KeyRotationFilePath> <\/p>\n<p>For more detail on using Flash Media Server 4.5.1 with Flash Access 3.0, please refer to Protected HTTP streaming Adobe&rsquo;s document.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Today, we are happy to publish a post on the new features of Adobe Flash Access 3.0. This is sort of a belated attempt to compensate certain gaps in the Adobe&#8217;s documentation. However, as soon as the next generation of Adobe Flash Access supporting iOS will have been announced, the basic features of the current [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/2541"}],"collection":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/comments?post=2541"}],"version-history":[{"count":7,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/2541\/revisions"}],"predecessor-version":[{"id":2548,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/posts\/2541\/revisions\/2548"}],"wp:attachment":[{"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/media?parent=2541"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/categories?post=2541"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.denivip.ru\/index.php\/wp-json\/wp\/v2\/tags?post=2541"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}