Система HDCP, разработанная корпорацией Intel для защиты контента выского разрешения от нелегального копирования, (или High-bandwidth Digital Content Protection) шифрует уже распакованные и полностью готовые к воспроизведению биты видео- и аудиоконтента высокой четкости при их передаче через HDMI, DVI и прочие цифровые интерфейсы вроде DisplayPort, UDI или GVIF. Иначе говоря, именно HDCP используется для защиты цифровых HD-сигналов «в проводах». Например, при передаче изображения и звука по кабелям, соединяющим Blu-Ray-плеер или ресивер спутникового HDTV с HD-телевизором.
Поскольку опубликованный ныне в интернете «мастер-ключ» — представляющий собой матрицу размером 40 × 40 ячеек, каждая из которых содержит 56-битное число — действительно оказался подлинным, это означает, фактически, что система HDCP более не предоставляет передаваемому в кабелях контенту никакой защиты от копирования. Потому что на основе данного мастер-ключа всякий грамотный программист теперь может сам (в теории, по крайней мере) сгенерировать сколько угодно полностью легитимных и «неотзываемых» HDCP-ключей для беспрепятственного доступа к защищенному системой содержимому.
С точки зрения функциональности, система HDCP, как это было задумано, должна решать три главных задачи: (1) она шифрует контент так, чтобы его нельзя было брать от кабеля; (2) она позволяет каждому оконечному устройству удостовериться, что другая оконечная точка связи — это тоже HDCP-лицензированное устройство; и (3) она позволяет «отзывать» уникальные ключи прежде легитимных, но впоследствии скомпрометированных пиратами устройств, создавая «черные списки» заблокированных ключей.
С точки зрения собственно защиты информации, принципиально важным этапом в работе системы HDCP является процедура начального «рукопожатия», в ходе которой формируется общий секретный ключ, который затем используется для шифрования коммуникаций между двумя устройствами. В то же самое время данная процедура позволяет каждому устройству удостовериться, что другое устройство является лицензированным для обработки HD-контента.
Всякий раз, когда речь заходит о криптотехнологии, исходная позиция для понимания конструкции системы — это разобраться с работой секретных ключей: сколько именно таких ключей предусмотрено, кому конкретно они известны и как именно они применяются.
В HDCP каждое устройство имеет уникальную пару ключей: один открытый ключ, который не является тайной; и один секретный ключ, который положено знать исключительно только этому устройству. Кроме того, система в целом имеет один-единственный мастер-ключ, который предполагается известным исключительно Центральному органу, управляющему всей системой HDCP. А также имеется особый алгоритм генерации ключей (который по давней традиции удобно для краткости называть Keygen), используемый Центром для формирования секретных ключей устройств. Этот генератор ключей на основе секретного мастер-ключа Центра и открытого ключа устройства неким хитрым способом формирует уникальный секретный ключ, который соответствует исключительно данному открытому ключу. Поскольку генератор ключа использует секретный мастер-ключ, заниматься созданием ключевых пар может только центральный орган власти.
Каждое HDCP-лицензированное устройство (например, Blu-Ray-плеер или HD-телевизор) имеет зашитые в него открытый ключ и соответствующий ему секретный ключ. Чтобы получить эти ключи для своих устройств, их изготовителям нужно содействие центрального органа власти HDCP, потому что лишь там занимаются генерацией и раздачей легитимных ключевых пар.
Теперь предположим, что два устройства, которые для простоты называют А и Б, собираются выполнить процедуру «рукопожатия». Для этого А посылает свой открытый ключ в Б, а Б, соответственно, свой открытый ключ в А. После чего каждая из сторон по заранее известному правилу комбинирует свой собственный секретный ключ с открытым ключом партнера, чтобы в результате получить общий секретный ключ для шифрования сеанса связи. Этот сеансовый ключ предполагается секретным — то есть известным исключительно сторонам А и Б — потому что для порождения общего ключа обязательно требуется знать либо секретный ключ А, либо секретный ключ Б.
Надо подчеркнуть, что для получения этого общего секрета А и Б фактически выполняют разные вычисления. Ведь А комбинирует свой секретный ключ с открытым ключом Б, а Б, наоборот, комбинирует свой секрет с открытой информацией от А. Если «случайно повстречавшиеся» А и Б производят существенно разные вычисления, то возникает естественный вопрос: каким образом в итоге у них получится один и тот же результат? Чтобы ответить на этот вопрос с исчерпывающей полнотой, понадобилось бы без нужды углубляться в дебри алгебраических уравнений. Здесь же вполне достаточно ограничится кратким ответом: потому что таким образом устроены математические свойства алгоритма Keygen.