رمزگذاری رسانه

درک هرمان
Derek Herman
جو مدلی
Joe Medley

در این بخش قصد داریم دو استراتژی مختلف برای رمزگذاری رسانه شما و چند مثال کاربردی در مورد نحوه استفاده از آنها با FFmpeg و Shaka Packager را پوشش دهیم. دو استراتژی برای رمزگذاری که در مورد آن بحث خواهیم کرد عبارتند از Clear Key و استفاده از سرویسی مانند Google Widevine . هر دو استراتژی نوعی مدیریت حقوق دیجیتال ( DRM ) برای کنترل کارهایی هستند که کاربران می توانند با رسانه شما انجام دهند. با این حال، یکی از آنها ذاتاً به دلیل نحوه ارسال کلیدها برای احراز هویت، امنیت کمتری نسبت به دیگری دارد و به همین دلیل است که سرویس DRM ممکن است منطقی تر باشد.

خدمات اولیه DRM برای وب عبارتند از Google Widevine ، Microsoft PlayReady و Apple FairPlay ، اما ما در این مقاله به همه آنها نخواهیم پرداخت. با این حال، اگر تمام مرورگرهای مدرن را هدف قرار می دهید، احتمالاً از هر سه سرویس DRM استفاده خواهید کرد.

تبدیل و رمزگذاری با این برنامه ها انجام می شود:

رمزگذاری کلید را پاک کنید

ابتدا، قبل از استفاده از Clear Key باید درک خوبی از اینکه Clear Key چیست و چیست داشته باشید. هنگامی که نمی خواهید از یک سرویس DRM موجود استفاده کنید و احساس می کنید رمزگذاری اولیه رسانه شما یک گزینه مناسب است، از Clear Key استفاده می کنید. اما، به خاطر داشته باشید که این نوع رمزگذاری همان سطح امنیتی را با استفاده از یکی از خدمات DRM ارائه نمی دهد. این به این دلیل است که جفت مقدار کلید بر خلاف کلیدهای رمزگذاری شده که توسط یک کلید رمزگشایی که در یک سرور مجوز ذخیره می شود، تولید می شود، تحت کلید دیگری رمزگذاری نمی شود. علاوه بر این، Clear Key جفت مقدار کلید را به صورت متن ساده ارسال می کند، بنابراین در حالی که رسانه خود را رمزگذاری می کنید، کلید رمزگشایی آن راز نیست.

یک کلید ایجاد کنید

می توانید از همین روش برای ایجاد یک کلید برای DASH و HLS استفاده کنید. این کار را با استفاده از OpenSSL انجام دهید. موارد زیر یک کلید رمزگذاری از 16 مقدار هگز ایجاد می کند.

openssl rand -hex 16 > media.key

یک IV ایجاد کنید

سپس می‌توانیم یک بردار اولیه (IV) تولید کنیم.

openssl rand -hex 16
6143b5373a51cb46209cfed0d747da66

با Clear Key رمزگذاری کنید

مثال زیر از 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

یک فایل اطلاعات کلیدی ایجاد کنید

برای رمزگذاری برای HLS، علاوه بر یک فایل کلید، به یک فایل اطلاعات کلیدی نیز نیاز دارید. فایل اطلاعات کلیدی یک فایل متنی با فرمت زیر است. باید پسوند .keyinfo را داشته باشد. به عنوان مثال: encrypt.keyinfo .

key URI
key file path
private key

URI کلید جایی است که 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

اکنون می دانید رمزگذاری Clear Key چیست و چه زمانی از آن استفاده کنید. اما چه زمانی باید از سرویس DRM برای امنیت بیشتر استفاده کرد؟ اینجا جایی است که Widevine یا سرویس دیگری برای رمزگذاری و رمزگشایی ایمن رسانه شما استفاده می شود. Widevine از MPEG-DASH و HLS پشتیبانی می کند و یک DRM از Google است. Widevine توسط مرورگرهای وب Google Chrome و Firefox، Android MediaDRM، Android TV و سایر دستگاه‌های الکترونیکی مصرفی استفاده می‌شود که از برنامه‌های افزودنی رسانه رمزگذاری‌شده و برنامه‌های افزودنی منبع رسانه استفاده می‌کنند، جایی که Widevine محتوا را رمزگشایی می‌کند.

با Widevine رمزگذاری کنید

بیشتر نمونه‌های این مقاله از رمزگذاری Clear Key استفاده می‌کردند. با این حال، برای Widevine شما می خواهید گزینه های زیر را جایگزین کنید.

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

همه چیز در دستور demultiplexer (demux) به جز نام فایل های شما و پرچم --content-id باید دقیقاً از مثال کپی شود. --content-id 16 یا 32 رقم هگز تصادفی است. از کلیدهای ارائه شده در اینجا به جای کلیدهای خود استفاده کنید. برای مثال‌های بیشتر، مستندات Shaka Packager در مورد استفاده از سرور Widevine Key را بخوانید.

  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. Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.

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

توالی تبدیل رسانه

این بخش به ترتیب دستورات مورد نیاز برای رسیدن از یک فایل .mov خام به دارایی های رمزگذاری شده بسته بندی شده برای DASH یا HLS را نشان می دهد. برای اینکه هدفی برای نشان دادن داشته باشیم، یک فایل منبع را به نرخ بیت 8 مگابایت با وضوح 1080p (1920 x 1080) تبدیل می کنیم. این مقادیر را همانطور که نیازهای شما دیکته می کند تنظیم کنید.

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. یک کلید رمزگذاری Clear Key ایجاد کنید.

    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. Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.

    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. یک کلید رمزگذاری Clear Key ایجاد کنید.

    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. Remux (ترکیب) جریان های صوتی و تصویری. اگر از یک چارچوب ویدیویی استفاده می کنید، ممکن است نیازی به انجام این کار نداشته باشید.

    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. یک کلید رمزگذاری Clear Key ایجاد کنید.

    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
    

این مطالب برای هضم زیاد بود، اما امیدواریم اکنون بتوانید رسانه های خود را با اطمینان رمزگذاری کنید. در ادامه نحوه افزودن رسانه به سایت خود را به شما نشان خواهیم داد.