मीडिया एन्क्रिप्ट (सुरक्षित) करने का तरीका

Derek Herman
Derek Herman
Joe Medley
Joe Medley

इस सेक्शन में, हम आपके मीडिया को एन्क्रिप्ट करने के लिए दो अलग-अलग रणनीतियों के बारे में बताएंगे. साथ ही, FFmpeg और Shaka Packager के साथ इनका इस्तेमाल करने के कुछ उदाहरण भी देंगे. हम एन्क्रिप्शन की दो रणनीतियों के बारे में बात करेंगे. पहला, क्लीयर पासकोड और दूसरा, Google Widevine जैसी सेवा का इस्तेमाल करना. दोनों रणनीतियां, डिजिटल राइट्स मैनेजमेंट (DRM) का एक रूप हैं. इनकी मदद से यह कंट्रोल किया जा सकता है कि उपयोगकर्ता आपके मीडिया का इस्तेमाल कैसे कर सकते हैं. हालांकि, पुष्टि करने के लिए पासकोड को पास करने के तरीके की वजह से, एक तरीका दूसरे से कम सुरक्षित होता है. इसलिए, डीआरएम सेवा का इस्तेमाल करना ज़्यादा सही होता है.

वेब के लिए मुख्य डीआरएम सेवाएं Google Widevine, Microsoft PlayReady और Apple FairPlay हैं. हालांकि, हम इस लेख में इन सभी के बारे में नहीं बताएंगे. हालांकि, अगर सभी आधुनिक ब्राउज़र को टारगेट किया जा रहा है, तो हो सकता है कि आप तीनों डीआरएम सेवाओं का इस्तेमाल करें.

कन्वर्ज़न और एन्क्रिप्शन (सुरक्षित) करने की प्रोसेस, इन ऐप्लिकेशन की मदद से की जाती है:

क्लियर की एन्क्रिप्शन

सबसे पहले, आपको यह अच्छी तरह से समझ लेना चाहिए कि क्लियर पासकोड क्या है और क्या नहीं. अगर आपको किसी मौजूदा डीआरएम सेवा का इस्तेमाल नहीं करना है और आपको लगता है कि आपके मीडिया को एन्क्रिप्ट (सुरक्षित) करने का बुनियादी तरीका सही है, तो आपको क्लियर की का इस्तेमाल करना होगा. हालांकि, ध्यान रखें कि इस तरह के एन्क्रिप्शन से उतनी सुरक्षा नहीं मिलती जितनी डीआरएम सेवाओं का इस्तेमाल करने से मिलती है. ऐसा इसलिए होता है, क्योंकि की-वैल्यू पेयर को किसी दूसरी कुंजी के तहत एन्क्रिप्ट नहीं किया जाता. एन्क्रिप्ट की गई कुंजियों के मामले में ऐसा नहीं होता. ये कुंजियां, लाइसेंस सर्वर पर सेव की गई डिक्रिप्ट करने की कुंजी से जनरेट होती हैं. इसके अलावा, क्लियर की, की-वैल्यू पेयर को सादे टेक्स्ट के तौर पर भेजती है. इसलिए, मीडिया को एन्क्रिप्ट करते समय, उसे डिक्रिप्ट करने की कुंजी को गुप्त नहीं रखा जाता.

कुंजी बनाना

DASH और एचएलएस, दोनों के लिए एक ही तरीके से कुंजी बनाई जा सकती है. ऐसा करने के लिए, OpenSSL का इस्तेमाल करें. इससे, 16 हेक्स वैल्यू वाली एन्क्रिप्शन पासकोड बनेगा.

openssl rand -hex 16 > media.key

आईवी बनाना

इसके बाद, हम इनिशलाइज़ेशन वेक्टर (IV) जनरेट कर सकते हैं.

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

साफ़ तौर पर दिखने वाली कुंजी से एन्क्रिप्ट करना

इस उदाहरण में, रॉ पासकोड के साथ Shaka Packager का इस्तेमाल किया गया है. इसमें keys और key_ids को सीधे Shaka Packager को दिया गया है. ज़्यादा उदाहरणों के लिए, दस्तावेज़ पढ़ें.

key फ़्लैग के लिए, पहले से बनाई गई कुंजी का इस्तेमाल करें. यह कुंजी, media.key फ़ाइल में सेव होती है. हालांकि, कमांड लाइन में इसे डालते समय, पक्का करें कि आपने इसके व्हाइटस्पेस को हटा दिया हो. key_id फ़्लैग के लिए, media.id वैल्यू दोहराएं या ऊपर जनरेट की गई आईवी वैल्यू का इस्तेमाल करें.

packager \
  input=glocken.mp4,stream=audio,output=glockena.m4a \
  input=glocken.mp4,stream=video,output=glockenv.mp4 \
  --enable_fixed_key_encryption \
  --keys label=audio:key=INSERT_AUDIO_KEY_HERE:key_id=INSERT_AUDIO_KEY_ID_HERE,label=video:key=INSERT_VIDEO_KEY_HERE:key_id=INSERT_VIDEO_KEY_ID_HERE

मुख्य जानकारी वाली फ़ाइल बनाना

एचएलएस के लिए एन्क्रिप्ट (सुरक्षित) करने के लिए, आपको कुंजी फ़ाइल के साथ-साथ कुंजी की जानकारी वाली फ़ाइल की भी ज़रूरत होती है. मुख्य जानकारी वाली फ़ाइल, एक टेक्स्ट फ़ाइल होती है. इसका फ़ॉर्मैट यहां दिया गया है. इसका एक्सटेंशन .keyinfo होना चाहिए. उदाहरण के लिए: encrypt.keyinfo.

key URI
key file path
private key

पासकोड के यूआरआई में, media.key (ऊपर बनाया गया) आपके सर्वर पर मौजूद होगा. कुंजी फ़ाइल का पाथ, कुंजी की जानकारी वाली फ़ाइल के हिसाब से उसकी जगह होती है. आखिर में, निजी पासकोड, media.key फ़ाइल का कॉन्टेंट या पहले बनाया गया आईवी होता है. उदाहरण के लिए:

https://example.com/keys/media.key
/path/to/media.key
6143b5373a51cb46209cfed0d747da66

एचएलएस के लिए एन्क्रिप्ट (सुरक्षित) करना

packager \
  'input=input.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
  'input=input.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
  --hls_master_playlist_output="master_playlist.m3u8" \
  --hls_base_url="http://localhost:5000/"

यह कमांड, 16 या 32 वर्णों वाली कुंजी स्वीकार करेगा.

ffmpeg -i myvideo.mov -c:v libx264 -c:a aac -hls_key_info_file encrypt.keyinfo myvideo.m3u8

Widevine एन्क्रिप्शन

अब आपको पता है कि क्लियर की एन्क्रिप्शन क्या है और इसका इस्तेमाल कब करना चाहिए. हालांकि, ज़्यादा सुरक्षा के लिए, डीआरएम सेवा का इस्तेमाल कब करना चाहिए? यहां Widevine या किसी दूसरी सेवा का इस्तेमाल, आपके मीडिया को सुरक्षित तरीके से एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट (सुरक्षित से सामान्य) करने के लिए किया जाएगा. Widevine, MPEG-DASH और HLS के साथ काम करता है. यह Google का डीआरएम है. Google Chrome और Firefox वेब ब्राउज़र, Android MediaDRM, Android TV, और अन्य उपभोक्ता इलेक्ट्रॉनिक डिवाइसों में Widevine का इस्तेमाल किया जाता है. ये डिवाइस, एन्क्रिप्ट किए गए मीडिया एक्सटेंशन और मीडिया सोर्स एक्सटेंशन का इस्तेमाल करते हैं. इनमें Widevine, कॉन्टेंट को डिक्रिप्ट करता है.

Widevine की मदद से एन्क्रिप्ट (सुरक्षित) करना

इस लेख के ज़्यादातर उदाहरणों में, क्लियर की एन्क्रिप्शन का इस्तेमाल किया गया है. हालांकि, Widevine के लिए आपको यहां दिए गए विकल्पों को बदलना होगा.

--enable_fixed_key_encryption \
--enable_fixed_key_decryption \
--keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE

डिमल्टीप्लेक्सर (डिमक्स) कमांड में, आपकी फ़ाइलों के नाम और --content-id फ़्लैग को छोड़कर, बाकी सभी चीज़ों को उदाहरण से पूरी तरह कॉपी किया जाना चाहिए. --content-id में 16 या 32 यादृच्छिक हेक्स अंक होते हैं. अपनी कुंजियों के बजाय, यहां दी गई कुंजियों का इस्तेमाल करें. ज़्यादा उदाहरणों के लिए, Widevine Key Server का इस्तेमाल करने के बारे में Shaka Packager का दस्तावेज़ पढ़ें.

  1. ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.

    packager \
      input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \
      input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \
      --enable_widevine_encryption \
      --key_server_url "https://license.uat.widevine.com/cenc/getcontentkey/widevine_test" \
      --content_id "fd385d9f9a14bb09" \
      --signer "widevine_test" \
      --aes_signing_key "1ae8ccd0e7985cc0b6203a55855a1034afc252980e970ca90e5202689f947ab9" \
      --aes_signing_iv "d58ce954203b7c9a9a9d467f59839249"
    
  2. ऑडियो और वीडियो स्ट्रीम को फिर से जोड़ना (एक साथ जोड़ना). अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो ऐसा करने की ज़रूरत नहीं है.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
    

मीडिया कन्वर्ज़न का क्रम

इस सेक्शन में, रॉ .mov फ़ाइल से DASH या HLS के लिए पैकेज की गई एन्क्रिप्ट की गई एसेट में बदलने के लिए, क्रम से ज़रूरी कमांड दिखाए गए हैं. उदाहरण के लिए, हम किसी सोर्स फ़ाइल को 1080 पिक्सल (1920 x 1080) रिज़ॉल्यूशन पर 8 एमबीएस की बिटरेट में बदल रहे हैं. अपनी ज़रूरत के हिसाब से इन वैल्यू में बदलाव करें.

DASH/WebM

  1. फ़ाइल टाइप और कोडेक बदलें.

    इस निर्देश के लिए, ऑडियो कोडेक के तौर पर liborbis या libopus का इस्तेमाल किया जा सकता है.

    ffmpeg -i glocken.mov -c:v libvpx-vp9 -c:a libvorbis -b:v 8M -vf setsar=1:1 -f webm tmp_glocken.webm
    
  2. क्लियर पासकोड एन्क्रिप्शन पासकोड बनाएं.

    openssl rand -hex 16 > media.key
    
  3. ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.

    packager \
      input=tmp_glocken.webm,stream=video,output=glocken_video.webm \
      input=tmp_glocken.webm,stream=audio,output=glocken_audio.webm \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \
      --mpd_output glocken_webm_vod.mpd
    
  4. ऑडियो और वीडियो स्ट्रीम को फिर से जोड़ना (एक साथ जोड़ना). अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो ऐसा करने की ज़रूरत नहीं है.

    ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
    

DASH/MP4

  1. फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट बदलें.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
    
  2. क्लियर पासकोड एन्क्रिप्शन पासकोड बनाएं.

    openssl rand -hex 16 > media.key
    
  3. ऑडियो और वीडियो को अलग करें, नई फ़ाइलों को एन्क्रिप्ट करें, और मीडिया प्रज़ेंटेशन डिस्क्रिप्शन (एमपीडी) फ़ाइल को आउटपुट करें.

    packager \
      input=tmp_glocken.mp4,stream=video,output=glocken_video.mp4 \
      input=tmp_glocken.mp4,stream=audio,output=glocken_audio.m4a \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE \
      --mpd_output glocken_mp4_vod.mpd
    
  4. ऑडियो और वीडियो स्ट्रीम को फिर से जोड़ना (एक साथ जोड़ना). अगर वीडियो फ़्रेमवर्क का इस्तेमाल किया जा रहा है, तो ऐसा करने की ज़रूरत नहीं है.

    ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
    

HLS/MP4

HLS सिर्फ़ MP4 के साथ काम करता है. इसलिए, आपको पहले इसे MP4 कंटेनर और काम करने वाले कोडेक में बदलना होगा.

  1. फ़ाइल टाइप, वीडियो कोडेक, और बिटरेट बदलें.

    ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
    
  2. क्लियर पासकोड एन्क्रिप्शन पासकोड बनाएं.

    openssl rand -hex 16 > media.key
    
  3. मुख्य जानकारी वाली फ़ाइल बनाना

    packager \
      'input=glocken.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
      'input=glocken.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
      --hls_master_playlist_output="master_playlist.m3u8" \
      --hls_base_url="http://localhost:5000/" \
      --enable_fixed_key_encryption \
      --enable_fixed_key_decryption \
      --keys label=:key=INSERT_KEY_HERE:key_id=INSERT_KEY_ID_HERE
    

हमने काफ़ी बातें बताई हैं. हालांकि, हमें उम्मीद है कि अब आप अपने मीडिया को भरोसे के साथ एन्क्रिप्ट कर पाएंगे. अगले लेख में, हम आपको अपनी साइट पर मीडिया जोड़ने का तरीका बताएंगे.