La gente dice che l'apertura del DVD con VLC (che visualizza il menu del DVD) rende magicamente accessibili i dati dd
, ma nessuno ha ancora spiegato perché sia così e come VLC compia questa impresa.
Sono riuscito a replicare questo comportamento quando provavo a riprodurre un DVD sul mio computer da un dispositivo Kodi collegato alla mia TV, usando SMB per condividere la radice dell'unità DVD sulla rete. Non ha funzionato, a meno che non avessi prima aperto il DVD con VLC, a quel punto Kodi poteva magicamente riprodurre i file.
Questo tipo di magia offende la mia sensibilità, quindi sono andato a scavare. La causa alla base del problema è che l'unità DVD funziona contro di te . Secondo Wikipedia :
Tuttavia, se l'unità rileva un disco che è stato compilato con CSS, nega l'accesso ai blocchi logici contrassegnati come protetti da copyright (§6.15.3 [2]). Il giocatore deve prima eseguire una stretta di mano di autenticazione (§4.10.2.2 [2]).
Quindi non è solo che otterrai dati crittografati che non possono essere riprodotti se leggi il DVD; l'unità non invierà indietro i bit a meno che qualche programma sulla propria macchina non si sia autenticato sull'unità, usando alcuni IOCTL specifici per DVD esposti dal kernel Linux (in questo caso, DVD_AUTH ). Ecco perché questo si manifesta come un errore I / O.
Maggiori informazioni su come funzionano questi IOCTL sono disponibili in questo post della mailing list dalla persona che li ha implementati , ma sostanzialmente forniscono un modo per il software userland di eseguire l'handshake segreto con l'hardware dell'unità DVD.
VLC svolge questa stretta di mano segreta attraverso libdvdcss
, che a sua volta sembra di farlo in GetBusKey()
acss.c
. Presumibilmente un programma autonomo collegato libdvdcss
potrebbe essere scritto per sbloccare l'unità per l'accesso come file, invece di fare affidamento su tutto VLC. Una volta sbloccato, l'unità non è in grado di dire quale programma sta leggendo da esso, quindi restituisce i bit (ancora crittografati ma ora leggibili) a chiunque, incluso dd
o cp
.
(È interessante notare che gli IOCTL DVD sono anche l'unico vero modo per ottenere la chiave di decrittazione utilizzata per decrittografare i dati sul disco, dopo averli letti. Se stai riproducendo una directory di file copiata, non hai accesso a gli IOCTL per ottenere le chiavi, quindi libdvdcss
ricorre alla crittoanalisi statistica per decifrare la crittografia .)