בחלק הזה נעסוק בשתי אסטרטגיות שונות להצפנה את המדיה שלך, וגם כמה דוגמאות מעשיות שיעזרו לך להשתמש בהם עם FFmpeg שאקה Packager. שתי האסטרטגיות להצפנה שנדון בהן הן מפתח נקי, באמצעות שירות כמו Google Widevine. שתי האסטרטגיות הן סוג של פרסום דיגיטלי ניהול זכויות (DRM) כדי לקבוע מה משתמשים יכולים לעשות עם המדיה שלכם. אבל, לפעמים מטבעם, אחד פחות בטוח מהשני בגלל אופן העברת המפתחות אימות, ולכן שירות DRM עשוי להיות הגיוני יותר.
שירותי ה-DRM העיקריים באינטרנט הם Google Widevine, Microsoft PlayReady ו-Apple FairPlay, אבל לא נעסוק בכולם במאמר הזה. עם זאת, אם תטרגטו את כל הדפדפנים המתקדמים, סביר להניח שתשתמשו כדי להשתמש בכל שלושת שירותי ה-DRM.
ההמרה וההצפנה מתבצעות באמצעות האפליקציות הבאות:
ניקוי הצפנת המפתחות
קודם כל, צריך להבין טוב מה זה מפתח נקי ומה לא לפני כן באמצעותו. אם אתם לא רוצים להשתמש בשירות קיים של ניהול זכויות דיגיטליות (DRM) וב הצפנה בסיסית של המדיה היא אפשרות מעשית, באמצעות ניקוי המפתח. אבל, חשוב לזכור שסוג ההצפנה הזה לא מספק את אותה רמה אבטחה כשימוש באחד משירותי ה-DRM. הסיבה לכך היא שצמד ערכי המפתח לא מוצפנים באמצעות מפתח אחר, בשונה ממפתחות מוצפנים שנוצרים על ידי מפתח לפענוח שמאוחסן בשרת רישיון. בנוסף, התכונה 'ניקוי מקש' שולחת את צמד ערכי המפתח כטקסט פשוט, כך שבזמן שמצפינים את המדיה לפענח אותו זה לא סוד.
יצירת מפתח
אפשר להשתמש באותה שיטה כדי ליצור מפתח גם ל-DASH וגם ל-HLS. עושים זאת באמצעות OpenSSL. הקוד הבא ייצור מפתח הצפנה מ-16 ערכים הקסדצימליים.
openssl rand -hex 16 > media.key
יצירת IV
בשלב הבא נוכל ליצור וקטור אתחול (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 וב הוא פרוטוקול 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
כל מה שמופיע בפקודת demultixer (demux) מלבד שם הקבצים שלך
צריך להעתיק את הדגל --content-id
בדיוק מהדוגמה. --content-id
הוא 16
או 32 ספרות הקסדצימליות אקראיות. עליך להשתמש במפתחות שמסופקים כאן במקום במפתחות שלך. לקריאה
תיעוד של Packager על השימוש ב-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. לצורך השגת יעד
שממחישים, אנחנו ממירים קובץ מקור לקצב העברת נתונים של 8MB ברזולוציה של
של 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
זה היה הרבה לתקציר, אבל אני מקווה שעכשיו אתה יכול להצפין את המדיה בביטחון. בשלב הבא נראה לך איך להוסיף מדיה באתר שלך.