많은 Zencoder 고객에게 트랜스코딩 과정에서 콘텐츠의 보안을 유지하는 것은 최우선 과제입니다. 이제 젠코더는 암호화된 입력을 지원하므로 고객은 데이터가 젠코더를 통과할 때 절대로 일반 데이터에 저장되지 않도록 할 수 있습니다. 간단히 말해, Zencoder는 암호화된 입력을 받아 트랜스코딩을 위해 암호를 해독한 다음 출력 동영상을 저장 위치에 쓰기 전에 다시 암호화할 수 있습니다. 이 워크플로우의 중요한 점은 입력과 출력이 모두 보호된다는 것입니다. 권한이 없는 사용자가 이러한 암호화된 파일에 액세스할 수 있는 경우, 암호화를 위해 사용된 키와 IV 쌍이 없으면 파일을 볼 수 없습니다. 이 프로세스가 어떻게 진행되는지 살펴보겠습니다. 시작하기 전에 먼저 암호화된 입력이 필요합니다. 이 예제에서는 OpenSSL을 사용하여 로컬에서 파일을 암호화한 다음 트랜스코딩 작업을 만들기 전에 S3에 업로드하겠습니다.
$ openssl aes-256-cbc -k zencoderisawesome -in trailer_test.mp4 -out trailer_test.mp4.enc -p
그리고 -k
플래그는 우리가 사용하려는 비밀이며, 이 경우 "zencoderisawesome"입니다. 이 경우 -p
플래그는 나중에 암호 해독에 필요한 키를 출력하도록 OpenSSL에 지시합니다. 저희의 경우 출력은 다음과 같습니다:
salt=9E7E90A964768A2F
key=DAFF64EAE3B3AB9C7905871E407293D4987E16DE76578372E161B1261F39CD66
iv =375FDBBB213C062D544FCB5A6ACBA44E
이제 파일이 암호화되었으므로 이전처럼 파일을 재생할 수 없습니다. 이제 젠코더가 액세스할 수 있도록 파일을 S3 또는 FTP 서버에 업로드해야 합니다. 여기서는 S3 업로드 인터페이스를 사용하겠습니다.요청을 빌드할 시간입니다. 이제 Node.js 라이브러리 를 사용하여 요청을 전송했지만, 이 예제에서와 같이 다른 도구를 사용하여 동일한 요청을 전송할 수도 있습니다. 요청 빌더. 위에서 입력에 사용한 암호화 키와 IV를 지정해야 합니다.
var zencoder = require('zencoder')();
zencoder.Job.create({
input: "s3://zencoder-demo/trailer_test.mp4.enc",
decryption_method: "aes-256",
decryption_key: "DAFF64EAE3B3AB9C7905871E407293D4987E16DE76578372E161B1261F39CD66",
decryption_password: "zencoderisawesome"
}, function(err, data) {
if (err) {
console.log("Job wasn't created");
return console.log(err);
}
console.log("Woo!");
console.log(data);
});
이 정도면 표준 h.264 출력을 만들기에 충분하지만 어떤 방식으로도 암호화되지 않습니다. 암호화된 메자닌 파일(다른 낮은 품질의 출력을 만드는 데 사용되는 매우 높은 품질의 파일)을 가져와 워터마크가 있거나 낮은 품질의 출력을 배포하는 데 사용하려는 경우에 유용할 수 있기 때문에 가끔 이 기능이 유용합니다. 하나의 메자닌 파일을 세 개의 서로 다른 서비스에 업로드한다고 가정해 보겠습니다. 한 출력물은 워터마크가 있는 암호화되지 않은 저품질 버전으로, 다른 두 출력물은 식별 워터마크가 있는 것과 없는 2개의 서로 다른 키를 사용하여 암호화하고 싶습니다. 하지만 이 요청을 생성하기 전에 사용할 두 개의 키를 생성해야 합니다. 이 새 키를 생성하기 위해 OpenSSL을 다시 사용하겠습니다:
$ openssl enc -aes-256-cbc -k supersecret -P
salt=12B83BBF81DFA5B7
key=48A9E3FA8A629AEBA5B4F1FAC962920F0D7084E306E0D01A0ED01C920BBCBD08
iv =2B3CABAB503198DB32394245F54E2A34
$ openssl enc -aes-256-cbc -k anothersecret -P salt=DE2DE044EA5FEB2A key=3AAE9D6E5212224BB9F76E328D2BD826F17B4FC292845B6E3B72634D2C28052D iv =169C3DE53C56E74130CDA57BA85F8255
이제 트랜스코딩 프로세스 중에 출력을 암호화할 때 이 키를 사용할 수 있습니다.
zencoder.Job.create({
input: "s3://zencoder-demo/trailer_test.mp4.enc",
decryption_method: "aes-256",
decryption_key: "DAFF64EAE3B3AB9C7905871E407293D4987E16DE76578372E161B1261F39CD66",
decryption_password: "zencoderisawesome",
outputs: [
{
url: 's3://some-bucket/decrypted.mp4',
quality: 3,
width: 320,
watermarks: [{
url: 's3://zencoder-live/test-job-watermark.png'
}]
},
{
url: 's3://some-other-bucket/encrypted-watermarked.mp4',
width: 720,
watermarks: [{
url: 's3://zencoder-live/test-job-watermark.png'
}],
encryption_method: "aes-256",
encryption_key: '48A9E3FA8A629AEBA5B4F1FAC962920F0D7084E306E0D01A0ED01C920BBCBD08',
encryption_iv: '2B3CABAB503198DB32394245F54E2A34'
},
{
url: 's3://some-bucket/encrypted-out.mp4',
width: 720,
encryption_method: "aes-256",
encryption_key: '3AAE9D6E5212224BB9F76E328D2BD826F17B4FC292845B6E3B72634D2C28052D',
encryption_iv: '169C3DE53C56E74130CDA57BA85F8255'
}
]
}, function(err, data) {
if (err) {
console.log("Job wasn't created…");
return console.log(err);
}
console.log("Woo!");
console.log(data);
});
하나의 출력물에서 암호화를 생략하고 다른 두 개의 출력물을 따로 암호화하는 것은 엉뚱한 것처럼 보일 수 있지만 사용 사례를 생각해 보세요. 저화질 출력은 샘플로 사용할 수 있습니다(이를 위해 더 짧은 클립을 만들 수도 있습니다). 고화질 버전에는 동영상이 업로드되는 사람을 식별하는 워터마크가 있으므로 해당 사람에게 암호를 해독하고 시청할 수 있는 키를 제공하면 해당 동영상이 통제 범위를 벗어난 곳에서 발견될 경우 누가 복사한 것인지 알 수 있습니다. 세 번째, 워터마크가 없는 사본은 저희가 관리하는 버킷에 다시 업로드되어 나중에 배포에 사용할 수 있습니다. 이렇게 암호화된 파일을 로컬에 확보한 후에는 원래 파일을 암호화할 때 사용한 것과 유사한 프로세스를 사용하여 암호를 해독할 수 있습니다. 워터마크가 있는 파일의 암호화를 해제하려면 다음과 같이 하세요: $ openssl enc -aes-256-cbc -d -K 48A9E3FA8A629AEBA5B4F1FAC962920F0D7084E306E0D01A0ED01C920BBCBD08 -iv 2B3CABAB503198DB32394245F54E2A34 -in encrypted-watermarked.mp4 -out decrypted-watermarked.mp4
워터마크 없이 파일 암호화를 해제하려면 다음과 같이 하세요: $ openssl enc -aes-256-cbc -d -K 3AAE9D6E5212224BB9F76E328D2BD826F17B4FC292845B6E3B72634D2C28052D -iv 169C3DE53C56E74130CDA57BA85F8255 -in encrypted-out.mp4 -out decrypted-out.mp4
이제 끝났습니다! 이제 엔드투엔드 암호화된 인코딩 파이프라인이 완성되었습니다. 이 예제에서 사용된 암호화된 파일은 해당 위치에서 사용할 수 있으며 실제로 이러한 자격 증명을 사용하여 암호화되었으므로 테스트 파일로 자유롭게 사용할 수 있습니다. 참고 사항디지털 권한 관리 또는 DRM과 혼동해서는 안 됩니다. 적절한 DRM 솔루션은 특정 디바이스 및 사용자까지 훨씬 더 세분화된 콘텐츠 액세스 권한과 같은 사항을 처리합니다. 암호화된 파일은 암호화 키와 연결된 비밀번호를 통해서만 볼 수 있지만, 이는 유일한 기준입니다.