Muzibu Müzik Platformu - AES-128 Şifreleme Uygulaması
Ne Yaptık?
Müzik dosyalarını çalmak için kullandığımız HLS (parçalı müzik sistemi) dosyalarına şifreleme sistemi ekledik. Artık yeni eklenen şarkılar otomatik olarak şifreli HLS dosyası olarak kaydediliyor.
Neden Önemli?
Şu Anda Ne Durumda?
Ne Karar Vereceğiz?
Mevcut 28,203 şarkının HLS dosyalarını yeniden oluşturup şifreleyecek miyiz? Bu işlem yaklaşık 6 saat sürecek ve tüm HLS dosyalarını yeniden üretecek.
Şifreleme Yöntemi:
Oluşturulan Dosyalar:
storage/muzibu/hls/[song_id]/enc.key - 16 byte encryption keystorage/muzibu/hls/[song_id]/enc.keyinfo - FFmpeg key info (geçici)storage/muzibu/hls/[song_id]/playlist.m3u8 - #EXT-X-KEY tag ilestorage/muzibu/hls/[song_id]/segment-*.ts - AES-128 encrypted segmentsDeğişen Dosya:
Modules/Muzibu/app/Jobs/ConvertToHLSJob.php
-hls_key_info_file eklendihttps://muzibu.com/storage/muzibu/hls/[song_id]/enc.keyFFmpeg Komutu (Değişiklik):
// ESKI (Şifresiz):
ffmpeg -i input.mp3 -map 0:a -c:a aac -b:a 128k -hls_time 10 -f hls playlist.m3u8
// YENİ (Şifreli):
ffmpeg -i input.mp3 -map 0:a -c:a aac -b:a 128k -hls_key_info_file enc.keyinfo -hls_time 10 -f hls playlist.m3u8
Playlist Örneği (m3u8):
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="https://muzibu.com/storage/muzibu/hls/10000/enc.key",IV=0x00000000000000000000000000000000
#EXTINF:10.005333,
segment-000.ts
#EXTINF:9.994667,
segment-001.ts
#EXT-X-ENDLIST
28,203 şarkının HLS dosyalarını şifreli olarak yeniden üretmek gerekecek.
İşlem Adımları:
storage/tenant1001/app/public/muzibu/hls/*/hls_path kolonunu NULL yap (28,203 kayıt)⚠️ Risk:
Enc.key dosyalarına erişimi kontrol eden middleware ekle.
Yapılacaklar:
CheckHLSKeyAccess.phpGET /storage/muzibu/hls/{song_id}/enc.keyÖrnek Kod:
Route::get('/storage/muzibu/hls/{songId}/enc.key', function ($songId) {
// Kullanıcı kontrolü
if (!auth()->check()) {
abort(401, 'Unauthorized');
}
// Premium kontrolü (isteğe bağlı)
if (!auth()->user()->isPremium()) {
abort(403, 'Premium membership required');
}
// Key dosyasını döndür
$keyPath = storage_path("app/public/muzibu/hls/{$songId}/enc.key");
return response()->file($keyPath);
})->middleware(['web', 'auth', 'throttle:60,1']);
Ücretsiz kullanıcılara düşük kalite, premium kullanıcılara tam kalite HLS sun.
Strateji:
hls_path_low ve hls_path_high kolonları ekleEnc.key erişim logları ve şüpheli aktivite takibi.
Takip Edilecekler:
❌ Post-Encryption ÇALIŞMAZ!
Mevcut şifresiz .ts dosyalarının üstüne enc.key eklemek işe yaramaz. Şifreleme FFmpeg encoding sırasında yapılmalı. Test folder 10000'de bu kanıtlandı (fake encryption).
🔄 Re-Encoding Zorunlu
28,203 HLS dosyasını şifrelemek için tek yol: Tüm HLS'leri silip yeniden üretmek (~6 saat süre).
🗑️ Silinen MP3'ler
Bazı şarkıların MP3 dosyaları silinmiş olabilir. Bu şarkılar için HLS üretilemeyecek. Manuel kontrol gerekebilir.
⚡ Sistem Yükü
28,203 job aynı anda queue'ye girecek. Horizon 135 worker ile sürekli çalışacak. Site performansı geçici olarak etkilenebilir.
🔒 Enc.Key Erişimi
Şu anda enc.key dosyaları herkese açık URL'de. Middleware eklenmeden gerçek koruma sağlanmaz. Sadece content scraping zorlaşır.
🎯 Horizon Restart
Kod değişikliğinden sonra mutlaka Horizon restart gerekli. Eski worker'lar eski kodu çalıştırır!
Şifreleme mutlaka FFmpeg encoding sırasında yapılmalı. Post-processing olarak enc.key eklemek işe yaramaz. Re-encoding zorunlu.
1️⃣ 28,203 HLS'i Şimdi Mi Şifreleyelim?
✅ EVET
❌ HAYIR
2️⃣ Yetkilendirme Sistemini Ne Zaman Ekleyelim?
3️⃣ Premium Kalite Farklılaştırması?