İçeriğe geç
← Tüm yazılar

tapeshelf videoları nasıl şifreliyor ve neden hiç anahtar saklamıyor

tapeshelf’teki özel bir video, sahibi ve sahibinin seçtiği kişiler içindir. Uygulamanın buna nasıl uyduğunu ve korumanın nerede bittiğini anlatalım.

Yüklemeden yayına

Tarayıcınız dosyayı doğrudan S3 uyumlu depolamadaki özel bir bucket’a yükler. Yükleme 16 MB’lık parçalarla yapılır ve bağlantı koparsa kaldığı yerden devam eder. Dosya API sunucularımızdan hiç geçmez.

Arka planda çalışan bir işçi (worker) dosyayı ffprobe ile kontrol eder, sonra meta verilerini (çekim yeri ve zamanı, kamera, yazar, yorumlar) temizler. Bunu, görüntüyü ve sesi yeniden kodlamadan dosyayı yeniden yazarak yapar. İnsanların indirdiği, temizlenmiş bu dosyadır. 18 Ekim 2026’dan önce yüklenen videolarda meta veriler duruyor.

1080p’ye kadar olan H.264 video birkaç kontrolden daha geçerse yalnızca yeniden paketlenir, bu da saniyeler sürer. Geri kalan her şey 1080p’ye kadar H.264’e dönüştürülür. Ardından ffmpeg sonucu altı saniyelik HLS segmentlerine böler. Safari bunları kendisi oynatır, diğer tarayıcılar hls.js ile oynatır.

Segmentleri şifrelemek

ffmpeg HLS’yi kendisi de şifreleyebilir, ama anahtarı diskte bir dosya olarak ister. Biz anahtarın hiçbir diske yazılmasını istemedik, bu yüzden segmentleri işçi kendisi şifreler:

  • her segment, HLS standardının tanımladığı yöntemle, CBC kipinde AES-128 ile şifrelenir;
  • anahtar 16 bayttır, her videoya özeldir ve yalnızca işçi çalışırken onun belleğinde bulunur;
  • başlatma vektörü segmentin sıra numarasıdır; çalma listesi başka bir vektör belirtmediğinde HLS oynatıcıları da bunu varsayar.

Özel bucket’a yalnızca şifreli segmentler ve onların çalma listesi gider. İşçinin geçici dosyaları iş bitince silinir.

Hiç saklanmayan anahtarlar

Bundan sonra anahtar hiçbir yerde tutulmaz. tapeshelf rastgele bir anahtar üretip onu korumaya çalışmak yerine, her gerektiğinde anahtarı yeniden türetir:

video key = HKDF-SHA256(master key, "video:" + video id + version) → 16 bytes

Bir videoyu düzenlemek sürüm numarasını artırır, bu da videoya yeni bir anahtar verir.

Ana anahtar (master key), sunucu yapılandırmasındaki tek bir sırdır. Veritabanında, bucket’larda ya da yedeklerde bulunmaz. Veritabanının bir kopyasında hiçbir video anahtarı yoktur, bucket’ta da yalnızca şifreli segmentler durur. Yani bir saldırganın sunucu yapılandırmasını da ele geçirmesi gerekir.

Ana anahtarı kaybederseniz hiçbir video bir daha oynamaz ve hiçbir veritabanı yedeği onu geri getirmez. Bu, en çok tapeshelf’i kendi sunucunuzda çalıştırıyorsanız önemlidir.

Oynat’a bastığınızda üç istek

  1. Oynatma. API izleme izniniz olup olmadığını kontrol eder: videoyu siz yüklediniz, video rafınızda ya da herkese açık. Sonra içinde imzalı bir token bulunan bir çalma listesi adresi döner. Token videoyu ve sizi (giriş yapmadıysanız hiç kimseyi) belirtir ve bir saat geçerlidir.
  2. Çalma listesi. API token’ı ve erişiminizi yeniden kontrol eder ve çalma listesini anında yeniden yazar. Her segment imzalı bir depolama bağlantısına dönüşür, anahtar satırı ise yine API’yi gösterir.
  3. Anahtar. Token bu video için verilmiş olmalıdır. Özel bir videoda, giriş yaptığınız oturum da token’da adı geçen kişiye ait olmalıdır. API ancak o zaman anahtarı türetir ve 16 baytını gönderir.

Geçici bir bağlantıda kontrol edilecek bir hesap yoktur, bu yüzden onun sayfasında token bağlantının kendisini belirtir. Her istek, bağlantının hâlâ çalıştığını ve videoyu hâlâ içerdiğini kontrol eder; token da hiçbir zaman bağlantıdan uzun yaşamaz. Bir misafirin takasta aldığı videolar da takas sayfasında aynı şekilde, bir hafta boyunca oynar.

Erişim kararları bir dakika boyunca önbellekte tutulur, böylece iki saatlik bir film her istekte veritabanına gitmez. Silinmiş bir video o bir dakika içinde hâlâ başlatılabilir. Süresi dolan ya da iptal edilen geçici bir bağlantı ise anında durur. İki durumda da zaten çalan bir oynatıcı, anahtarını ve segment bağlantılarını elinde tutar ve oynatmaya devam edebilir.

Segment bağlantıları da imzalıdır ve süreleri bir saat ya da daha uzun bir sürenin sonunda dolar. Oynatıcı çalma listesini bir kez yükler; kısa ömürlü bağlantılar basit bir duraklatmayı bile bozardı. Bir bağlantının süresi dolunca oynatıcı oynatmayı yeniden ister ve aynı yerden devam eder. Anahtar olmadan bir segment zaten işe yaramaz.

Neden alıp götürülecek bir dosya yok

Oynatıcı hiçbir zaman video dosyasının bağlantısını almaz. Bir token’a bağlı çalma listesi, şifreli parçalar ve bir kontrolün arkasında duran bir anahtar alır. Özel bir videonun çalma listesi adresini bir arkadaşınızın tarayıcısına kopyalarsanız hiçbir şey oynamaz, çünkü anahtar sizin oturumunuzu ister.

İndirme ayrı bir konu. Giriş yapmış kişiler izleyebildikleri videoları indirebilir. Hesabınız yoksa yalnızca biri size geçici bir bağlantı gönderdiyse onun üzerinden indirebilirsiniz, bir de takasta misafir olarak aldıklarınızı bir hafta boyunca. Bir indirme bağlantısı iki dakika geçerlidir.

Görseller farklı çalışır. Kapaklar, her videodan alınan 16 kare ve onlardan yapılan kare önizlemesi, uzun rastgele adlarla herkese açık bir bucket’ta durur ve bu bucket’ın içeriği listelenemez. Özel bir videonun önizlemesinin görünmesi bilerek verilmiş bir karar: ziyaretçiye ne istemek üzere olduğunu gösterir.

Neye karşı korur

  • Erişimi olmayanlar ne çalma listesi, ne segment, ne de anahtar alır.
  • Sızan bir segment bağlantısı şifreli gürültüden ibarettir. Özel bir videonun sızan çalma listesi bağlantısı, verildiği kişinin oturumu olmadan çalışmaz ve zaten bir saat içinde süresi dolar.
  • Çalınan bir veritabanı kopyası hiçbir anahtarı açığa çıkarmaz.

Neye karşı korumaz

  • İzleyebilen kaydedebilir. Erişimi olan biri ekranını kaydedebilir ya da uygun araçlarla yayını kaydedebilir. Anahtar ona meşru yoldan verilmiştir. tapeshelf’te DRM yok. Widevine ya da FairPlay gibi gerçek DRM ticari lisans sunucularına bağlıdır ve yine de ekrana tutulan bir kamerayı durduramaz.
  • Paylaştığınız kişiler. Bir paylaşım ya da takas karşı tarafa kalıcı bir kopya verir ve o kişi dosyayı indirebilir. Gönderdiğiniz geçici bağlantıyı açan herkes de bağlantı çalıştığı sürece indirebilir. Dosyanın bundan sonra başına gelenler bizim elimizde değil. Güvendiğiniz kişilerle paylaşın.
  • Sunucunun kendisi. Bu uçtan uca şifreleme değil. Anahtarları sunucu türetir, yani sunucuyu işleten kişi her videoyu oynatabilir. tapeshelf.com’da bu biziz ve hizmeti yürütmek ve denetlemek için gerektiğinde özel videoları açıyoruz. Kendi sunucusunda kurulmuş bir tapeshelf’te bu kişi yöneticidir.

Kısa özeti güvenlik sayfasında. Bize inanmak yerine kontrol etmeyi tercih ederseniz kod açık kaynak ve onu kendiniz de çalıştırabileceksiniz.