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

डेरिक हरमन
डेरिक हरमन
जो मेडली
जो मेडली

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

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

रूपांतरण और एन्क्रिप्शन इन ऐप्लिकेशन के साथ किया जाता है:

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

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

कुंजी बनाएं

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

openssl rand -hex 16 > media.key

आईवी बनाएं

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

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

पारदर्शी कुंजी से एन्क्रिप्ट करें

इस उदाहरण में, RAW कुंजियों वाले शाका पैकेजर का इस्तेमाल किया गया है. इसमें 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

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

HLS के लिए एन्क्रिप्ट करने के लिए, आपको एक कुंजी फ़ाइल के अलावा एक कुंजी जानकारी फ़ाइल की ज़रूरत होती है. कुंजी की जानकारी वाली फ़ाइल, नीचे दिए गए फ़ॉर्मैट वाली टेक्स्ट फ़ाइल होती है. इसका एक्सटेंशन .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

HLS के लिए एन्क्रिप्ट करें

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 का डीआरएम है. 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

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

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

डैश/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
    

डैश/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
    

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

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