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

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

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

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

कुंजी को एन्क्रिप्ट (सुरक्षित) करने की सुविधा मिटाएं

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

कुंजी बनाएं

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

openssl rand -hex 16 > media.key

IV बनाएं

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

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

साफ़ कुंजी से एन्क्रिप्ट करें

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

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 फ़ाइल या आपके पहले बनाए गए IV का कॉन्टेंट होती है. उदाहरण के लिए:

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 का DRM है. Widevine का इस्तेमाल Google Chrome और Firefox वेब ब्राउज़र, Android MediaDRM, Android TV, और एन्क्रिप्ट किए गए मीडिया एक्सटेंशन और मीडिया सोर्स एक्सटेंशन का इस्तेमाल करने वाले दूसरे उपभोक्ता इलेक्ट्रॉनिक डिवाइस में किया जाता है. यहां 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 फ़्लैग को छोड़कर, deमल्टीप्लेक्सर (demux) कमांड में मौजूद सभी चीज़ों को उदाहरण से कॉपी किया जाना चाहिए. --content-id, 16 या 32 रैंडम हेक्स अंकों का होता है. अपनी कुंजियों के बजाय यहां दी गई कुंजियों का इस्तेमाल करें. ज़्यादा उदाहरणों के लिए, Widevine की सर्वर का इस्तेमाल करने के बारे में Shaka पैकेजर के दस्तावेज़ पढ़ें.

  1. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (MPD) फ़ाइल देता है.

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

डैश/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. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (MPD) फ़ाइल देता है.

    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
    

डैश/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. Demux, ऑडियो और वीडियो को अलग करता है, नई फ़ाइलों को एन्क्रिप्ट करता है, और मीडिया प्रज़ेंटेशन की जानकारी (MPD) फ़ाइल देता है.

    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
    

एचएलएस/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
    

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