בחלק זה נדון בשתי אסטרטגיות שונות להצפנת המדיה שלך, וכמה דוגמאות מעשיות לאופן השימוש בהן עם FFmpeg ו-Shaka Packager. שתי אסטרטגיות ההצפנה שנדון בהן הן מפתח ברור ושימוש בשירות כמו Google Widevine. שתי האסטרטגיות הן סוג של ניהול זכויות דיגיטליות (DRM) המאפשר לקבוע מה המשתמשים יכולים לעשות במדיה שלכם. עם זאת, סוג אחד מאובטח פחות מהשני בגלל הדרך שבה מפתחות מועברים לאימות, ולכן כדאי להשתמש בשירות DRM.
שירותי ה-DRM העיקריים באינטרנט הם Google Widevine, Microsoft PlayReady ו-Apple FairPlay, אבל במאמר הזה לא נפרט את כולם. עם זאת, אם אתם מטרגטים את כל הדפדפנים המודרניים, סביר להניח שתשתמשו בכל שלושת שירותי ה-DRM.
ההמרה וההצפנה מתבצעות באפליקציות הבאות:
ניקוי הצפנת מפתחות
קודם כול, צריך להבין טוב מה זה מפתח ניקוי ומה לא לפני שמשתמשים בו. אם אתם לא רוצים להשתמש בשירות DRM קיים, ואתם סבורים שההצפנה הבסיסית של המדיה שלכם היא אפשרות מעשית, כדאי להשתמש ב-Clear Key. אבל חשוב לזכור שסוג ההצפנה הזה לא מספק את אותה רמת אבטחה כמו בשימוש באחד משירותי ה-DRM. הסיבה לכך היא שצמד ערכי המפתח לא מוצפן באמצעות מפתח אחר, בניגוד למפתחות מוצפנים שנוצרים על ידי מפתח פענוח שמאוחסן בשרת רישיונות. בנוסף, 'ניקוי מפתח' שולח את זוג ערכי המפתח כטקסט פשוט, כך שבזמן הצפנת המדיה המפתח לפענוח הוא לא סודי.
יצירת מפתח
אפשר להשתמש באותה שיטה כדי ליצור מפתח גם ל-DASH וגם ל-HLS. אפשר לעשות זאת באמצעות 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
יצירת קובץ מידע של מפתח
כדי להצפין עבור 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
עכשיו אתם יודעים מהי הצפנת מפתחות הצפנה ומתי להשתמש בה. אבל, מתי כדאי להשתמש בשירות DRM להגברת האבטחה? כאן אפשר להשתמש ב-Widevine, או בשירות אחר, כדי להצפין את המדיה ולפענח אותה באופן מאובטח. Widevine תומך ב-MPEG-DASH וב-HLS והוא DRM של 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
כל מה שמופיע בפקודה desinglexer (demux), מלבד שם הקבצים שלכם והדגל --content-id
, צריך להעתיק בדיוק מהדוגמה. הערך --content-id
מכיל 16 או 32 ספרות הקסדצימליות אקראיות. השתמשו במפתחות שסופקו כאן במקום במפתחות שלכם. לדוגמאות נוספות, קראו את מסמכי התיעוד של Shaka בנושא השימוש ב-Widevine Key Server.
לבצע פענוח (נפרד) של האודיו והווידאו, להצפין את הקבצים החדשים וליצור פלט של קובץ תיאור של מצגת מדיה (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"
ביצוע רמיקס (שילוב) של זרמי האודיו והווידאו. אם אתם משתמשים בפריים של וידאו, ייתכן שלא תצטרכו לעשות זאת.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocke.mp4
רצף המרות למדיה
בקטע הזה מתוארים לפי הפקודות הנדרשות כדי לעבור מקובץ .mov
גולמי לנכסים מוצפנים שארוזים עבור DASH או HLS. לצורך המחשה, אנחנו ממירים קובץ מקור לקצב העברת נתונים של 8Mbs ברזולוציה של 1080p (1920 x 1080). אתם יכולים לשנות את הערכים האלה לפי הצרכים שלכם.
DASH/WebM
ממירים את סוג הקובץ והקודק.
בפקודה הזו אפשר להשתמש ב-
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
צריך ליצור מפתח הצפנה עם מפתח ניקוי.
openssl rand -hex 16 > media.key
לבצע פענוח (נפרד) של האודיו והווידאו, להצפין את הקבצים החדשים וליצור פלט של קובץ תיאור של מצגת מדיה (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
ביצוע רמיקס (שילוב) של זרמי האודיו והווידאו. אם אתם משתמשים בפריים של וידאו, ייתכן שלא תצטרכו לעשות זאת.
ffmpeg -i glocken_video.webm -i glocken_audio.webm -c copy glocken.webm
DASH/MP4
המרה של סוג הקובץ, קודק הווידאו וקצב העברת הנתונים.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 tmp_glocken.mp4
צריך ליצור מפתח הצפנה עם מפתח ניקוי.
openssl rand -hex 16 > media.key
לבצע פענוח (נפרד) של האודיו והווידאו, להצפין את הקבצים החדשים וליצור פלט של קובץ תיאור של מצגת מדיה (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
ביצוע רמיקס (שילוב) של זרמי האודיו והווידאו. אם אתם משתמשים בפריים של וידאו, ייתכן שלא תצטרכו לעשות זאת.
ffmpeg -i glocken_video.mp4 -i glocken_audio.m4a -c copy glocken.mp4
HLS/MP4
ב-HLS יש תמיכה ב-MP4 בלבד, לכן תחילה יש להמיר לקונטיינר MP4 ולרכיבי קודק נתמכים.
המרה של סוג הקובץ, קודק הווידאו וקצב העברת הנתונים.
ffmpeg -i glocken.mov -c:v libx264 -c:a aac -b:v 8M -strict -2 glocken.mp4
צריך ליצור מפתח הצפנה עם מפתח ניקוי.
openssl rand -hex 16 > media.key
יצירת קובץ מידע של מפתח
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
זה היה הרבה תקציר, אבל אני מקווה שעכשיו תוכלו להצפין את המדיה שלכם בביטחון. בשלב הבא נראה לכם איך להוסיף מדיה לאתר שלכם.