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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

Google Widevine, Microsoft Play ready, और 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 वैल्यू को दोहराएं या ऊपर जनरेट की गई IV वैल्यू का इस्तेमाल करें.

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 और एचएलएस के साथ काम करता है. यह 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 फ़्लैग को छोड़कर, डीमल्टीप्लेक्सर (demux) कमांड में सब कुछ ठीक इसी उदाहरण से कॉपी किया जाना चाहिए. --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 फ़ाइल से डैश या एचएलएस के लिए पैकेज की गई एन्क्रिप्ट की गई ऐसेट पर जाने के लिए ज़रूरी कमांड दिखाता है. उदाहरण के लिए, हम किसी सोर्स फ़ाइल को 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

एचएलएस सिर्फ़ 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
    

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