Патент на изобретение №2371756

Published by on




РОССИЙСКАЯ ФЕДЕРАЦИЯ



ФЕДЕРАЛЬНАЯ СЛУЖБА
ПО ИНТЕЛЛЕКТУАЛЬНОЙ СОБСТВЕННОСТИ,
ПАТЕНТАМ И ТОВАРНЫМ ЗНАКАМ
(19) RU (11) 2371756 (13) C2
(51) МПК

G06F3/02 (2006.01)
G06F1/00 (2006.01)
G06F21/00 (2006.01)
G09C1/00 (2006.01)

(12) ОПИСАНИЕ ИЗОБРЕТЕНИЯ К ПАТЕНТУ

Статус: по данным на 18.08.2010 – действует

(21), (22) Заявка: 2004113566/09, 30.04.2004

(24) Дата начала отсчета срока действия патента:

30.04.2004

(30) Конвенционный приоритет:

02.05.2003 US 10/428,675

(43) Дата публикации заявки: 27.10.2005

(46) Опубликовано: 27.10.2009

(56) Список документов, цитированных в отчете о
поиске:
ЕР 1286242 А1, 26.02.2003. БЕРНЕТ С., ПЭЙН С. Криптография. Официальное руководство RSA Security. – М.: БИНОМ, 2002, с.55, третий абзац, с.59, второй абзац, с.60, последний абзац, с.63, третий абзац, с.212, первый абзац, с.378. US 6088794 А, 11.07.2000. ЛОМАКИН ПАВЕЛ и др. Иллюстрированная Энциклопедия компьютерного железа. – М.: Майор, 2002,с.231. ПЕСКОВ С.А. и др. Центральные и периферийные устройства электронных вычислительных средств. – М.: Радио и связь, 2000, с.114-119, 130. БРЮС ШНАЙЕР. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си – М.: ТРИУМФ, 2002, с.225, раздел 9.3, с.308-335, 405-407.

Адрес для переписки:

129090, Москва, ул. Б.Спасская, 25, стр.3, ООО “Юридическая фирма Городисский и Партнеры”, пат.пов. Ю.Д.Кузнецову, рег. 595

(72) Автор(ы):

ПЕЙНАДО Маркус (US),
БЕНАЛО Джош (US)

(73) Патентообладатель(и):

МАЙКРОСОФТ КОРПОРЕЙШН (US)

(54) БЕЗОПАСНАЯ СВЯЗЬ С КЛАВИАТУРОЙ ИЛИ РОДСТВЕННЫМ УСТРОЙСТВОМ

(57) Реферат:

Изобретение относится к средствам безопасной связи между клавиатурой и компонентом, таким как часть программного обеспечения, выполняемого на компьютере. Техническим результатом является обеспечение безопасной связи между двумя компонентами, такими как клавиатура или родственное устройство, и компонент программного обеспечения, через небезопасный канал связи. Первое начальное значение известно как клавиатуре, так и компоненту. Клавиатура и компонент обмениваются временными значениями. И клавиатура, и компонент вычисляют второе начальное значение и третье начальное значение на основе временных значений и первого начального значения. Как клавиатура, так и компонент выполняют одно и то же вычисление, так что и клавиатура, и компонент имеют одни и те же второе и третье начальные значения. Клавиатура шифрует нажатия клавиш, предназначенные для компонента, с использованием метода CBC-3DES на основе ключа и второго начального компонента, и также создает код аутентификации сообщений для каждого нажатия клавиши с использованием CBC-3DESMAC на основе ключа и третьего начального значения. Компонент дешифрует и верифицирует нажатия клавиш с использованием ключа и второго и третьего начальных значений. 5 н. и 21 з.п. ф-лы, 6 ил.

ОБЛАСТЬ ТЕХНИКИ

Данное изобретение относится в целом к области компьютерной безопасности. Более конкретно, изобретение относится к безопасному использованию клавиатуры по каналу связи, который может подвергаться перехвату или другим типам преступного использования связи.

ПРЕДШЕСТВУЮЩИЙ УРОВЕНЬ ТЕХНИКИ

Клавиатура передает вводимые пользователем данные электронному устройству, такому как компьютер. При нажатии пользователем клавиши на клавиатуре клавиатура генерирует данные, представляющие конкретную клавишу, которая была нажата (например, код ASCII для буквы «е»), и эти данные принимаются некоторым компонентом в компьютере, таким как драйвер устройства. Драйвер устройства затем представляет эти данные любой программе, выполняемой на компьютере и принимающей в настоящее время вводимые данные (например, путем помещения данных в буфер ввода для любой активной прикладной программы).

Одна из проблем, которая возникает в использовании клавиатуры для принятия данных, состоит в том, что данные являются восприимчивыми или нуждаются иным образом в поддержании секретными. Например, приложение защиты (или служба защиты операционной системы) может попросить пользователя ввести пароль, который вообще не должен разглашаться публике без определенной цели. Однако, путь, ведущий от клавиатуры к компоненту программного обеспечения, который примет данные, не является безопасным, так как существует несколько возможностей перехватить данные. Например, данные часто передаются по шине, которая подвергается отслеживанию, и управляются драйвером устройства, который может быть подделан (или который операционная система позволит быть замененным небезопасным драйвером устройства, который сохраняет и разглашает информацию, которой этот драйвер управляет). Другими словами, существует несколько возможностей наблюдать или подделать секретные данные на их пути от клавиатуры к последнему пункту назначения.

В общем, можно зашифровать данные для передачи между двумя компонентами, которые связаны небезопасным каналом. Однако многие способы шифрования не могут быть легко применены в контексте клавиатуры из-за различных факторов, таких как вопросы управления ключом, возможность атаки на воспроизведение информации и того факта, что относительно малый диапазон данных, который может быть генерирован клавиатурой, могут сделать обычный код на связи с клавиатурой относительно легким для взлома, если выборка шифротекста небольшого размера может быть перехвачена.

Ввиду вышеизложенного существует необходимость в способе, который облегчает безопасную связь с клавиатурой.

КРАТКОЕ ИЗЛОЖЕНИЕ СУЩНОСТИ ИЗОБРЕТЕНИЯ

Данное изобретение обеспечивает способ для безопасной связи между двумя компонентами, такими как клавиатура или родственное устройство, и компонент программного обеспечения, через небезопасный канал связи. Этот способ использует схему шифрования, которая особенно хорошо приспособлена для клавиатуры и которая направлена на решение проблем, которые могут существовать в применении стандартной схемы шифрования к клавиатуре.

Клавиатура в соответствии с изобретением сохраняет ключ и постоянное значение, которое используется для инициализации схемы шифрования. Компонент (например, приложение, выполняемое на компьютере) сохраняет тот же самый ключ и то же самое постоянное значение, которые хранятся в клавиатуре. Для того, чтобы инициировать безопасный сеанс связи между компонентом и клавиатурой, каждый генерирует временное значение и затем обменивает временное значение с другим, так что и клавиатура, и компонент владеют обоими временными значениями. Клавиатура и компонент затем вычисляют два начальных значения, каждое из которых основано на двух временных значениях, ключ и постоянное значение. Например, первое начальное значение может быть создано путем использования алгоритма CBC-3DESMAC, где CBC-3DESMAC использует хранимое постоянное значение в качестве его первоначального значения цепочки и применяет ключ к сообщению, созданному на основе двух временных значений (CBC-3DESMAC относится к применению тройного шифрования согласно алгоритму стандарта шифрования данных (DES) с цепочкой блоков шифрования, и с использованием финального блока шифротекста для создания кода аутентификации сообщений (MAC)). Предпочтительно второе начальное значение создано посредством инвертирования битов в первом начальном значении (то есть посредством выполнения операции «исключающее ИЛИ» между первым начальным значением и числом 0xffffffffffffffff). Поскольку клавиатура и компонент вычисляют первое и второе начальные значения одним и тем же образом, они оба владеют одними и теми же двумя начальными значениями.

В альтернативном предпочтительном варианте осуществления клавиатура и компонент снабжены двумя постоянными значениями, и первое, и второе начальные значения могут быть созданы путем применения CBC-3DESMAC к сообщению, которое основано на обоих временных значениях, с использованием первой константы для создания первого начального значения и второй константы для создания второго начального значения.

После создания первого и второго начальных значений клавиатура готова передать шифрованные данные, и компонент, который примет данные, готов дешифровать и верифицировать данные. При вводе данных в клавиатуру клавиатура шифрует данные на основе первого начального значения и ключа. Предпочтительно клавиатура шифрует данные вышеупомянутым ключом с использованием CBC-3DES (тройной DES с цепочкой цифровых блоков), с первым начальным значением, используемым для инициирования цепочки цифровых блоков. Клавиатура также предпочтительно создает МАС (код аутентификации сообщений) для каждого блока данных, использующего CBC-3DESMAC, где CBC-3DESMAC применяет вышеупомянутый ключ и использует второе начальное значение для инициирования цепочки цифровых данных. Предпочтительно каждое нажатие клавиши шифруется в отдельный блок шифрования, и весь поток данных, генерируемый в клавиатуре во время сеанса связи, составляет цепочку цифровых блоков, так как этот способ позволяет одному и тому же нажатию клавиши (например, буквы «е») появиться в качестве другого шифрованного текста, зависящего от нажатия клавиши, которое предшествовало этому.

Как только зашифрованные данные и МАС были приняты в принимающем компоненте, принимающий компонент использует вышеупомянутый ключ и первое, и второе начальные значения для дешифровки и верификации принятых данных.

Другие особенности изобретения описаны ниже.

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

Вышеприведенное краткое изложение, также как нижеследующее подробное описание предпочтительных вариантов, лучше понимаются при чтении в сочетании с прилагаемыми чертежами. С целью иллюстрирования изобретения на чертежах показаны примерные конструкции изобретения; однако изобретение не ограничено описанными специфическими способами и средствами. На чертежах:

фиг. 1 является блок-схемой примерной вычислительной среды, в которой могут быть реализованы аспекты изобретения;

фиг. 2 является блок-схемой первого примерного окружения, в котором связь между клавиатурой и компонентом может иметь место по небезопасному каналу;

фиг. 3 является блок-схемой второго примерного окружения, в котором связь между клавиатурой и компонентом может иметь место по небезопасному каналу;

фиг. 4 является блок-схемой клавиатуры и компонента, которые были сконфигурированы для безопасной связи и которые обмениваются временными значениями, в соответствии с аспектами изобретения;

фиг. 5 является блок-схемой процесса для привлечения безопасного сеанса связи между клавиатурой и компонентом;

фиг. 6 является блок-схемой первого примерного окружения, в котором клавиатуры и компоненты могут быть распределены для привлечения безопасной связи согласно аспектам изобретения.

ПОДРОБНОЕ ОПИСАНИЕ ИЗОБРЕТЕНИЯ

Примерная вычислительная среда

Фиг. 1 иллюстрирует примерное вычислительное окружение, в котором могут быть реализованы аспекты изобретения. Окружение 100 вычислительной системы является только одним примером подходящего вычислительного окружения и не предназначено для какого-либо ограничения как в диапазоне использования, так и в функциональности изобретения. Также вычислительное окружение 100 не должно интерпретироваться как имеющее какую-либо зависимость или требование, относящееся к любому из компонентов или любой комбинации компонентов, показанных в примерном рабочем окружении 100.

Изобретение работает с бесчисленными другими окружениями или конфигурациями вычислительных систем общего назначения или специального назначения. Примеры хорошо известных вычислительных систем, окружений и/или конфигураций, которые могут подходить для использования с изобретением, включают в себя, но не ограничены этим, персональные компьютеры, компьютеры-серверы, ручные или портативные устройства, многопроцессорные системы, основанные на микропроцессоре системы, телеприставки, программируемые потребительские электронные схемы, сетевые ПК, миникомпьютеры, универсальные вычислительные машины, встроенные системы, распределенные вычислительные окружения, которые включают в себя любую из вышеупомянутых систем или устройств, и т.п.

Изобретение может быть описано в общем контексте выполняемых компьютером команд, таких как программные модули, выполняемые компьютером. Обычно программные модули включают в себя подпрограммы, программы, объекты, компоненты, структуры данных и т.д., которые выполняют конкретные задачи или реализуют особые абстрактные типы данных. Изобретение может также быть использовано в распределенных вычислительных окружениях, где задачи выполняются удаленными устройствами обработки, которые связаны через сеть связи или другую среду передачи данных. В распределенном вычислительном окружении программные модули и другие данные могут быть расположены как в локальных, так и в удаленных компьютерных запоминающих средах, включая устройства памяти.

Со ссылкой на фиг. 1, примерная система для реализации изобретения включает в себя вычислительное устройство общего назначения в форме компьютера 110. Компоненты компьютера 110 могут включать в себя, но не ограничиваются этим, процессор 120, системную память 130 и системную шину 121, которая связывает различные системные компоненты, включая системную память, с процессором 120. Системная шина 121 может быть любого из нескольких типов структур шин, включающих шину памяти, или контроллер памяти, шину периферийных устройств и локальную шину, использующую любую из разнообразия архитектур шин. Посредством примера, но не ограничения, такие архитектуры включают в себя шину стандартной архитектуры для промышленного применения (ISA), шину микроканальной архитектуры (МСА), шину расширенной стандартной архитектуры для промышленного применения (EISA), локальную шину VESA и шину PCI (также известную как шина Mezzanine). Системная шина 121 может также быть реализована как соединение «точка-точка», коммутирующее устройство и т.п., среди устройств связи.

Компьютер обычно включает в себя множество считываемых компьютером носителей. Считываемым компьютером носителем может быть любой доступный носитель, к которому может обращаться компьютер 110, и включает в себя как энергозависимые и энергонезависимые носители, сменные или не удаляемые носители. Посредством примера, а не ограничения, считываемый компьютером носитель может включать в себя компьютерные носители памяти и среды связи. Компьютерные носители памяти включают в себя как энергозависимые, так и энергонезависимые, сменные и не удаляемые носители, реализованные любым способом или технологией для хранения информации, такой как считываемые компьютером команды, структуры данных, программные модули или другие данные. Компьютерные носители памяти включают в себя, но не ограничены ими, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или другую технологию памяти, ПЗУ на компакт-диске, цифровой универсальный диск (DVD) или другую память на оптическом диске, магнитные кассеты, магнитную ленту, память на магнитном диске или другие устройства магнитной памяти, или любой другой носитель, который может быть использован для хранения требуемой информации и который может быть доступен для компьютера 110. Среды связи обычно воплощают считываемые компьютером команды, структуры данных, программные модули или другие данные в модулированный сигнал данных, такой как сигнал несущей или другой механизм перемещения и включает в себя любую среду распространения информации. Термин «модулированный сигнал данных» означает сигнал, который имеет одну или несколько своих характеристик, установленных или измененных таким образом, чтобы кодировать информацию в сигнале. Посредством примера, а не ограничения, среда связи включает в себя проводную среду, такую как проводная сеть или непосредственное проводное соединение, и беспроводную среду, такую как акустическая, радиочастотная, инфракрасная и другие беспроводные среды. Комбинация любых из вышеупомянутых сред должна также включаться в диапазон считываемых компьютером носителей.

Системная память 130 включает в себя компьютерный носитель памяти в форме энергозависимой и/или энергонезависимой памяти, такой как ПЗУ (ROM) 131 и ОЗУ (RAM) 132. Базовая система ввода/вывода 133 (BIOS), содержащая основные подпрограммы, которые помогают передавать информацию между элементами в пределах компьютера 110, например при включении, обычно хранится в ПЗУ 131. ОЗУ 132 обычно содержит данные и/или программные модули, которые непосредственно доступны процессору 120 или в данный момент обрабатываются процессором 120. Посредством примера, а не ограничения, фиг. 1 иллюстрирует операционную систему 134, прикладные программы 135, другие программные модули 136 и программные данные.

Компьютер 110 может также включать в себя другие сменные/не удаляемые, энергозависимые/энергонезависимые компьютерные носители памяти. Только посредством примера, фиг. 1 иллюстрирует дисковод 140 жесткого диска, который считывает или записывает на неудаляемый энергонезависимый магнитный носитель, дисковод 151 магнитного диска, который считывает или записывает на сменный энергонезависимый магнитный диск 152, и дисковод 155 оптического диска, который считывает или записывает на сменный энергонезависимый оптический диск 156, такой как ПЗУ на компакт-диске или другой оптический носитель. Другие сменные/неудаляемые, энергозависимые/энергонезависимые компьютерные носители памяти, которые могут быть использованы в примерном рабочем окружении, включают в себя, но не ограничены этим, кассеты магнитной ленты, карты флэш-памяти, цифровые универсальные диски, ленты цифрового видео, твердотельное ОЗУ, твердотельное ПЗУ и т.п. Дисковод 141 жесткого диска обычно подключен к системной шине 121 через неудаляемый интерфейс памяти, такой как интерфейс 140, и дисковод 151 магнитного диска и дисковод 155 оптического диска обычно подключены к системной шине 121 посредством удаляемого интерфейса памяти, такого как интерфейс 150.

Дисководы и связанные с ними компьютерные носители памяти, описанные выше и иллюстрированные на фиг. 1, обеспечивают хранение считываемых компьютером команд, структур данных, программных модулей и других данных для компьютера 110. На фиг. 1, например, дисковод 141 жесткого диска проиллюстрирован как хранящий операционную систему 144, прикладные программы 145, другие программные модули 146 и программные данные 147. Отметим, что эти компоненты могут либо быть такими же, либо отличаться от операционной системы 134, прикладных программ 135, других программных модулей 136 и программных данных 137. Операционная система 144, прикладные программы 145, другие программные модули 146 и программные данные 147 имеют здесь отличающиеся номера для иллюстрации того, что, как минимум, они являются другими копиями. Пользователь может вводить команды и информацию в компьютер 20 через устройства ввода, такие как клавиатура 162 и указательное устройство 161, обычно называемое мышью, трекболом или сенсорной панелью. Другие устройства ввода (не показаны) могут включать в себя микрофон, джойстик, игровую панель, спутниковую антенну, сканер и т.п. Эти и другие устройства ввода часто подключены к процессору 120 через интерфейс 160 пользовательского ввода, который подключен к системной шине, но может быть подключен посредством других структур интерфейсов и шин, таких как параллельный порт, игровой порт или универсальная последовательная шина (USB). Монитор 191 или другой тип устройства отображения также подключен к системной шине 121 через интерфейс, такой как видеоинтерфейс 190. В дополнение к монитору компьютеры могут также включать в себя другие периферийные устройства вывода, такие как громкоговорители 197 и принтер 196, которые могут быть подключены через интерфейс периферийных устройств вывода 190.

Компьютер 110 может работать в сетевом окружении с использованием логических подключений к одному или нескольким удаленным компьютерам, таким как удаленный компьютер 180. Удаленным компьютером 180 может быть персональный компьютер, сервер, маршрутизатор, сетевой ПК, одноранговое устройство или другой узел общей сети, и обычно включает в себя многие или все элементы, описанные выше относительно компьютера 110, хотя только устройство памяти 181 было проиллюстрировано на фиг. 1. Логические подключения, изображенные на фиг. 1, включают в себя локальную сеть (LAN) 171 и глобальную сеть (WAN) 173, но могут также включать в себя другие сети. Такие сетевые окружения являются обычными в офисах, компьютерных сетях предприятий, интранет и Интернет.

При использовании в сетевом окружении LAN компьютер 110 подключен к LAN 171 через сетевой интерфейс или адаптер 170. При использовании в сетевом окружении WAN компьютер 110 обычно включает в себя модем 172 или другое средство для установления связи по WAN 173, такой как Интернет. Модем 172, который может быть внутренним или внешним, может быть подключен к системной шине 121 через интерфейс 160 пользовательского ввода или другой подходящий механизм. В сетевом окружении программные модули, изображенные относительно компьютера 110, или их части могут храниться в удаленном устройстве памяти. Посредством примера, а не ограничения, фиг. 1 иллюстрирует удаленные программы 185 как находящиеся в устройстве памяти 181. Специалистам ясно то, что показанные сетевые подключения являются примерными, и что могут использоваться другие средства установления линии связи между компьютерами.

Безопасность связи между клавиатурой и компонентом

Изобретение направлено на решение такой проблемы, как клавиатура может быть использована для безопасной связи с компонентом, который требует ввода данных от клавиатуры. Фиг. 2 показывает примерный сценарий такой связи. На фиг. 2 клавиатура 162 обеспечивается данными с компонентом 204. Компонентом 204 может быть любой тип компонента, например программа, исполняемая на компьютере, часть аппаратного обеспечения и т.д. Информация от клавиатуры 162 к компоненту 202 проходит через канал связи, который включает в себя по меньшей мере некоторую небезопасную часть 204. А именно, поскольку данные, которые представляют нажатия клавиш, проходят через некоторый канал на их пути от клавиатуры 162 к компоненту 202, существует некоторая возможность для третьей стороны перехватить или подделать эти данные. Этот перехват или подделка может быть проблемой, если, например, информацией, которая набирается на клавиатуре 162, является секретный пароль, который не должен быть открыт общей публике.

Фиг. 3 показывает конкретный сценарий, в котором является желательной безопасная связь между клавиатурой и компонентом. На фиг. 3 клавиатура 162 используется для обеспечения ввода данных для программы, которая прогоняется на компьютере 110. В примере на фиг. 3 клавиатурой 162 является клавиатура, приспособленная для использования с универсальной последовательной шиной (USB) 302. (Для краткости, такая клавиатура будет называться клавиатурой USB.) Клавиатура 162 принимает нажатия клавиш и помещает байты, представляющие эти нажатия клавиш, на USB 302, где эти байты считываются драйвером USB 304. Драйвер 304 затем передает эти байты к их окончательному месту назначения, которым, в примере фиг. 3, является программное обеспечение 306. Программное обеспечение 306 является примером компонента 202 (показанного на фиг. 2).

В примере на фиг. 3 имеются две операционные системы 134(1) и 134(2), выполняемые на компьютере 110. Операционной системой 134(1) является обычная операционная система, такая как MICROSOFT WINDOWS XP, Unix, Linux, Solaris и т.д. Операционной системой 134(2) является операционная система с «высокой гарантией», которая используется для надежных приложений. Например, операционная система 134(2) может быть связана с «завешенной» (защищенной) памятью, которая не является доступной извне операционной системы 134(2), и операционная система 134(2) может хранить секретную информацию (например, криптографические ключи, пароли и т.д.) в этой защищенной памяти, так что только определенные специальные надежные приложения, которым разрешено выполняться под операционной системой 134(2), способны считывать эту секретную информацию. Операционная система 134(2) предоставляет «высокую гарантию» в том смысле, что публика имеет право на высокий уровень гарантии, что она выполнит свою функцию правильно, т.е. если защита секретной информации является одной из заданных функций операционной системы 134(2), то публика имеет право на высокий уровень гарантии, что операционная система 134(2) не разгласит эту секретную информацию. Часть способности защитить секретную информацию может включать в себя способность принять напечатанные секретные данные (например, пароли) без разглашения этих секретов внешнему миру. Операционная система 134(2) может не доверить драйверу 304 управлять такой секретной информацией, так как драйвер 304 находится под управлением операционной системы 134(1) (и операционная система 134(1) может позволить хакеру считывать информацию непосредственно с USB 302, или заменить драйвер на незаконный драйвер, который хранил бы и раскрывал бы секретную информацию). Таким образом, операционной системе 134(2) необходим способ приема информации от клавиатуры 162 через операционную систему 134(1) без рассмотрения того, что секретная информация будет разглашаться действиями, возникающими в операционной системе 134(1).

Следует понимать, что хотя пример фиг. 3 показывает клавиатуру 162 как обменивающуюся информацией с компьютером 110 через универсальную последовательную шину 302, сценарии, описанные выше, применяются независимо от точных средств, посредством которых клавиатура 162 осуществляет связь с компьютером 110, и таким образом изобретение не ограничено клавиатурами USB.

Фиг. 4 иллюстрирует, как клавиатура 162 и компонент 202 могут быть сконфигурированы для участия в безопасной связи через небезопасный канал. Клавиатура 162 и компонент 202 каждые хранят копию криптографического ключа 402. Клавиатура 162 и компонент 202 также предпочтительно хранят постоянное значение 404, которое используется как начальная величина для конкретного предпочтительного криптографического способа, как более конкретно описано ниже. Еще в одном предпочтительном варианте клавиатура 162 и компонент 202 могут хранить (в дополнение к ключу) два постоянных значения вместо одного; эти два постоянных значения могут использоваться в криптографическом способе, как описано ниже. Клавиатура 162 может, например, содержать встроенный энергонезависимый полупроводниковый прибор, который хранит ключ 402 и константу 404, или может иметь порт, который принимает сменный носитель памяти, на котором хранятся ключ 402 и константа 404. В случае, когда компонентом 202 является компонент программного обеспечения, ключ 402 и константа 404 могут храниться в пространстве данных компонента 202. Будет ясно, однако, что изобретение не ограничено каким-либо конкретным способом хранения ключа 402 и 404.

В начале безопасной связи между клавиатурой 162 и компонентом 202 клавиатура 162 и компонент 202 могут генерировать и обмениваться временными значениями (значениями времени). А именно клавиатура 162 генерирует временное значение 412 и посылает временное значение 412 к компоненту 202. Компонент 202 генерирует временное значение 414 и посылает временное значение 414 к клавиатуре 162. Как известно в данной области техники, временным значением (значением времени) является часть данных, которая используется в криптографических приложениях – часто для аутентификации объекта криптографически, или для подготовки сеанса шифрования с нелегко воспроизводимым элементом, от которого шифрование может быть сделано зависимым. Временные значения 412 и 414 могут использоваться для создания начальных значений для шифрования и аутентификации данных, передаваемых между клавиатурой 162 и компонентом 202, как более конкретно описано ниже.

Процесс безопасной посылки данных от клавиатуры к компоненту

Фиг. 5 иллюстрирует процесс, посредством которого клавиатура 162 и компонент 202 могут участвовать в сеансе связи, где компонент 202 безопасно принимает данные от клавиатуры 162. Процесс фиг. 5 предусматривает как шифрование (которое защищает от перехвата передаваемых данных), так и аутентификацию (которая защищает от модификации передаваемых данных). Однако понятно, что либо одно шифрование, либо одна аутентификация могут быть использованы в зависимости от требований безопасности передачи. Например, если модификация данных может допускаться, но перехват не может допускаться, то может использоваться одно шифрование. Напротив, если перехват данных может допускаться, но модификация данных не может допускаться, то может использоваться одна аутентификация.

Первоначально, клавиатура 162 и компонент 202 обмениваются 502 временными значениями. Например, как описано выше со ссылками на фиг. 4, клавиатура 162 может генерировать временное значение 412 и послать его к компоненту 202, и компонент 202 может генерировать временное значение 414 и послать его к клавиатуре 162. Способы для генерирования временных значений известны в данной области техники и поэтому подробно не описываются здесь. В качестве примеров временные значения 412 и 414 могут генерироваться на основе случайного числа, содержимого некоторой области памяти, времени, температуры, фазы луны и т.д., или любого другого фактора, который способен часто изменяться и имеет достаточный диапазон, так что маловероятно, что либо клавиатура 162, либо компонент 202 создаст одно и то же временное значение дважды.

После обмена 502 временными значениями 412 и 414 клавиатура 162 и компонент 202 владеют обоими временными значениями. Клавиатура 162 и компонент 202 затем используют общую согласованную формулу для вычисления 504 двух начальных значений -IV_c и IV_m – как функции обоих временных значений и ключа 402. А именно, если К = ключ 402, N1= временное значение 412 и N2 = временное значение 414, то

IV_c = f(K, N1, N2); и

IV_m = g(K, N1, N2).

Функциями f и g могут быть любые функции. В предпочтительном варианте

f(K, N1, N2) = CBC-3DESMACK(const_IV, N1|N2); и

g(K, N1, N2) = f(K, N1, N2) xor 0xffffffffffffffff,

где const_IV равна постоянному значению 404 (показано на фиг. 4). Еще в одном предпочтительном варианте, где клавиатура и компонент делят два постоянные значения (например, const_IV_1 и const_IV_2), функции f и g могут альтернативно вычисляться следующим образом:

f(K, N1, N2) = CBC-3DESMACK(const_IV_1, N1|N2); и

g(K, N1, N2) = CBC-3DESMACK(const_IV_2, N1|N2).

(Оператор «|» означает конкатенацию, так что N1|N2 есть величина, являющаяся результатом конкатенации N1 с N2. «xor» является побитовой операцией «исключающее ИЛИ», так что «А xor В» является величиной, являющейся результатом установки на «1» любого бита, который является «1» либо в А, либо в В, но не в обоих, и установки всех других битов на нуль.) CBC-3DESMACK(const_IV, N1|N2) является криптографической функцией, смысл которой известен в данной области техники и описывается более подробно ниже.

После вычисления IV_c и IV_m может начаться обмен информацией между клавиатурой 162 и компонентом 202. Клавиатура 162 принимает нажатие клавиши – т.е. посредством нажатия оператором одной из клавиш (или определенной комбинации клавиш, такой как и «А», или и «А») (этап 506). Затем клавиатура шифрует 508 нажатие клавиши; шифрование предпочтительно основано на ключе 402 и IV_c. В предпочтительном варианте нажатия клавиш шифруются с использованием CBC-3DES, с ключом 402 в качестве ключа и IV_c в качестве начального значения. CBC-3DES является криптографическим алгоритмом, который известен в данной области техники и описан более подробно ниже. Кроме того, клавиатура 162 вычисляет 510 код аутентификации сообщений (МАС) для нажатия клавиши, предпочтительно на основе ключа 402 и IV_m. В предпочтительном варианте код аутентификации сообщений создается с использованием CBC-3DESMAC с ключом 402 в качестве ключа и IV_m в качестве начального значения. Как отмечалось выше, CBC-3DESMAC известен в данной области техники и описан более подробно ниже.

После того, как клавиатура создала и шифрованные нажатием клавиши данные, и МАС, компонент 202 принимает 512 шифрованные нажатием клавиши данные и МАС от клавиатуры 162 (этап 512). Компонент 202 затем дешифрует 514 эти данные с использованием ключа 402 и IV_c, и также верифицирует данные с использованием ключа 402 и IV_m (этап 514). Процесс затем возвращается на этап 506 для приема следующего ввода в клавиатуре.

Криптографические функции CBC-3DES и CBC-3DESMAC

CBC-3DES является криптографической функцией, которая комбинирует стандарт шифрования данных (DES) с цепочкой цифровых блоков (СВС). «3DES» означает, что алгоритм шифрования DES применяется к данному блоку данных три раза («тройной DES»). DES шифрует данные путем применения ключа к данным известным образом. DES шифрует длинное сообщение путем разделения сообщения на меньшие блоки и шифрования индивидуальных блоков. (При использовании «тройного DES» алгоритм DES применяется к каждому блоку три раза для создания шифротекста для этого блока.) DES (и тройной DES) может шифровать каждый блок данных с использованием только ключа; однако при использовании цепочки цифровых блоков шифрование одного блока основано не только на ключе, но также на шифротексте, который был создан посредством шифрования последнего блока. Таким образом, шифрование данного блока основано на двух вводимых данных: ключе и шифротексте, который был результатом шифрования предыдущего блока. Поскольку первый блок данных, подлежащий шифрованию, не имеет «предыдущего» блока, процесс образования цепочки цифровых блоков должен быть подготовлен с «начальным значением», а именно первый блок данных шифруется на основе ключа и некоторого начального значения. Это начальное значение не используется в шифровании последующих блоков, но может опосредованно влиять на то, как шифруются эти блоки (так как шифротекст первого блока основан на начальном значении, шифротекст второго блока основан на шифротексте первого блока и т.д.).

Ввиду предыдущего обсуждения фраза «CBC-3DESK(IV, сообщение)» означает шифрование «сообщения» ключом K, с использованием тройного DES и цепочки цифровых блоков, где IV – начальное значение для цепочки цифровых блоков.

CBC-3DESMAC является способом использования CBC-3DES для создания кода аутентификации сообщений (МАС). В частности, фраза CBC-3DESMACK(IV, сообщение) означает, что «сообщение» шифруется ключом К с использованием тройного DES и цепочки цифровых блоков, и с использованием IV в качестве начального значения для цепочки цифровых блоков. Однако, поскольку целью CBC-3DESMAC является создание МАС для сообщения вместо сложного шифротекста для сообщения, сохраняется только последний блок шифротекста, и остающиеся блоки шифротекста могут не учитываться. Этот последний блок шифротекста может использоваться как МАС, так как – даже при заданных постоянном ключе и постоянном IV – маловероятно, что различные сообщения создадут один и тот же последний блок (или, более точно, если каждый блок представляет 2n различных значений, то существует вероятность только 1 к 2n, что любые два сообщения будут иметь один и тот же последний блок).

Следует отметить, что конкретный выбор CBC-3DES так же, как и способ его использования, особенно выгоден для шифрованной связи с клавиатурой. Поскольку область сообщений, подлежащих шифрованию, мала (например, порядка 128 различных символов ASCII), цепочка цифровых блоков особенно полезна в предохранении шифра от взлома. Если было использовано прямое шифрование (без цепочки), то в пределах данного сеанса связи каждый символ шифровал бы один и тот же шифротекст каждый раз, когда он был напечатан – например, печатание «е» всегда создавало бы один и тот же шифротекст. Посредством предположения (на основе опыта, например, путем использования того факта, что «е» является наиболее часто встречающейся буквой в английском языке) кто-нибудь мог бы более легко взломать такой шифр. Образование цепочки из всего ввода в сеансе связи делает этот шифр более трудным для взлома посредством обеспечения того, что одни и те же данные могут появляться как различный шифротекст, в зависимости от того, где он появляется в потоке ввода (например, «е» может не всегда создавать один и тот же шифротекст). Кроме того, изменение шифрования для каждого сеанса путем создания нового начального значения, основанного на временных значениях, мешает наблюдателям детектировать образцы использования, которые они могли бы использовать для компрометации безопасности (например, если первым текстом, набранным в каждом сеансе, является пароль, то наблюдатель мог бы захватить этот шифротекст для пароля и начать атаку на воспроизведение информации). Кроме того, размер цифровых блоков, используемых DES, особенно хорошо подходит, так как DES оперирует на 8-байтовых блоках, и большинство протоколов клавиатуры передает данные в блоках, которые могут подходить к этому размеру (например, стандарт USB также имеет дело с 8-байтовыми блоками, так что каждый блок USB может соответствовать одному блоку DES без потери места). Однако следует понимать, что может использоваться шифр любого другого блока, и понятия цепочки, подобной CBC, могут быть применены к такому шифру блока.

Кроме того, следует отметить, что по тем же причинам, по каким схема шифрования, описанная здесь, особенно подходит к клавиатуре, эта схема шифрования также хорошо подходит к определенным типам устройств ввода, таким как мышь (или другое указывающее устройство). Эти устройства ввода совместно используют различные особенности вместе с клавиатурой, такие как малый словарь и ограниченная способность выполнять сложный алгоритм шифрования.

Примерное использование клавиатуры, которая шифрует данные

Фиг. 6 показывает примерное окружение, в котором клавиатура, которая выполняет шифрование, может быть использована с компонентами, которые требуют безопасной связи. В примере на фиг. 6 изготовитель 602 изготавливает множество клавиатур 162(1), 162(2), , 162(n) и распределяет эти клавиатуры для общественного использования. Каждая из клавиатур 162(1), 162(2), , 162(n) включает в себя ключ 402 и постоянное значение 404 (показанное на фиг. 4) (или включает в себя некоторое средство, посредством которого ключ 402 и постоянное значение 404 могут быть доступны извне, например, посредством порта или сменной полупроводниковой памяти). Изготовитель 604 создает компоненты 202(1), 202(2), , 202(m), которые извлекают выгоду из безопасного установления связи с клавиатурой. Каждый из компонентов 202(1), 202(2), , 202(m) включает в себя ключ 402 и постоянное значение 404 (или каким-либо образом способен принять ключ и постоянное значение). Компоненты 202(1), 202(2), , 202(m) могут теперь принимать вводимые данные от клавиатур 162(1), 162(2), , 162(n) посредством способов, описанных выше.

Изготовитель 602 может иметь предварительно существующую связь с изготовителем 604, так что оба изготовителя могут прийти к соглашению относительно ключа 402 и постоянной 404, которые должны быть использованы для безопасной связи. В одном примере изготовители 602 и 604 являются одним и тем же объектом. В другом примере изготовитель 604 является изготовителем компонентов 202(1), 202(2), , 202(m), который хотел бы, чтобы эти компоненты были способны принимать данные от безопасных клавиатур, и изготовитель 602 является изготовителем клавиатур, которого изготовитель 604 считал достаточно заслуживающим доверия для изготовления клавиатур для безопасной связи с компонентами 202(1), 202(2), , 202(m) и поддержания ключа 402 и/или постоянной 404.

Отметим, что вышеприведенные примеры были обеспечены просто с целью объяснения и никоим образом не должны толковаться как ограничивающие данное изобретение. Хотя изобретение было описано со ссылкой на различные варианты осуществления, ясно, что слова, которые были использованы здесь, являются словами описания и иллюстрации, а не словами ограничения. Кроме того, хотя изобретение было описано здесь со ссылкой на конкретные средства, материалы и варианты осуществления, изобретение не предназначено быть ограниченным частностями, раскрытыми здесь; скорее, изобретение простирается на все функционально эквивалентные структуры, способы и использования, которые находятся в пределах объема прилагаемой формулы изобретения. Специалисты в данной области техники, имеющие преимущество доктрины этого описания, могут осуществлять ее бесчисленные модификации, и изменения могут быть сделаны, не выходя за рамки объема и сущности изобретения в его аспектах.

Формула изобретения

1. Способ связи с клавиатурой, предусматривающий этапы:
прием в компоненте первого временного значения от клавиатуры;
посылку к клавиатуре из упомянутого компонента второго временного значения;
создание первого начального значения и второго начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации упомянутых первого временного значения и второго временного значения с использованием ключа и третьего начального значения, которое известно как клавиатуре, так и компоненту,
прием, в компоненте от клавиатуры, множества данных, которые были зашифрованы тройным DES и цепочкой блоков шифрования с использованием ключа и первого начального значения, причем упомянутый ключ и упомянутое первое начальное значение известны как компоненту, так и клавиатуре;
дешифровку множества данных на основе упомянутого первого начального значения и упомянутого ключа.

2. Способ по п.1, дополнительно предусматривающий:
прием в компоненте от клавиатуры множества кодов аутентификации сообщений, соответствующих упомянутому множеству данных, причем упомянутые коды аутентификации сообщений созданы тройным DES и цепочкой блоков шифрования с использованием упомянутого ключа и второго начального значения, отличного от упомянутого первого начального значения, причем упомянутое второе начальное значение известно как компоненту, так и клавиатуре;
верификацию множества данных посредством использования множества кодов аутентификации сообщений.

3. Способ по п.2, дополнительно предусматривающий:
прием первого временного значения от клавиатуры;
посылку второго временного значения к клавиатуре;
создание первого начального значения посредством применения тройного DES и цепочки блоков к комбинации первого временного значения и второго временного значения с использованием ключа и третьего начального значения, которое известно как клавиатуре, так и компоненту; и
создание второго начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и четвертого начального значения, которое известно как клавиатуре, так и компоненту.

4. Способ по п.1, в котором множество данных принимается через канал, поведенческой целостности которого не доверяет компонент.

5. Способ по п.4, в котором компонент содержит первую операционную систему, которая выполняется на вычислительном устройстве вместе со второй операционной системой, причем первая операционная система не доверяет, по меньшей мере в некотором отношении, поведению второй операционной системы, причем клавиатура осуществляет связь с первой операционной системой через драйвер, управляемый второй операционной системой.

6. Способ по п.1, в котором клавиатура является клавиатурой USB.

7. Способ по п.6, в котором упомянутый тройной DES и цепочка блоков шифрования шифруют данные в блоки, имеющие заданный размер, и в котором клавиатура передает данные в блоках упомянутого заданного размера.

8. Способ по п.1, в котором каждое из множества данных генерируется на основе индивидуального нажатия клавиши, принимаемого в клавиатуре.

9. Способ по п.1, дополнительно предусматривающий:
прием первого временного значения от клавиатуры;
посылку второго временного значения к клавиатуре и
создание первого начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и второго начального значения, которое известно как клавиатуре, так и компоненту.

10. Считываемый компьютером носитель, содержащий записанные на нем, выполняемые компьютером команды для выполнения способа безопасного приема ввода данных в компоненте из клавиатуры, причем способ предусматривает этапы:
прием в компоненте первого временного значения от клавиатуры;
посылку второго временного значения из компонента к клавиатуре и
создание первого начального значения и второго начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации упомянутых первого временного значения и второго временного значения с использованием ключа и третьего начального значения, которое известно как клавиатуре, так и компоненту,
прием в компоненте от клавиатуры множества шифрованных данных, соответствующих нажатиям клавиш, причем упомянутые шифрованные данные созданы в клавиатуре посредством шифрования данных, вводимых нажатиями клавиш, принимаемых в клавиатуре, тройным DES и цепочкой блоков шифрования с использованием ключа и первого начального значения, причем этот ключ и первое начальное значение доступны как клавиатуре, так и компоненту; и
дешифровку в компоненте множества шифрованных данных, соответствующих нажатиям клавиш, с использованием ключа и первого начального значения.

11. Считываемый компьютером носитель по п.10, в котором компонент содержит первую операционную систему, которая выполняется на вычислительном устройстве вместе со второй операционной системой, причем первая операционная система не доверяет, по меньшей мере в некотором отношении, поведению второй операционной системы, причем клавиатура осуществляет связь с первой операционной системой через драйвер, управляемый второй операционной системой.

12. Считываемый компьютером носитель по п.10, в котором способ дополнительно предусматривает:
прием в компоненте от клавиатуры множества кодов аутентификации сообщений, соответствующих множеству шифрованных нажатий клавиш, причем упомянутые коды аутентификации сообщений созданы тройным DES и цепочкой блоков шифрования с использованием упомянутого ключа и второго начального значения, отличного от упомянутого первого начального значения, причем упомянутое второе начальное значение известно как компоненту, так и клавиатуре;
верификацию множества шифрованных нажатий клавиш посредством использования множества кодов аутентификации сообщений.

13. Считываемый компьютером носитель по п.12, в котором способ дополнительно предусматривает:
прием первого временного значения от клавиатуры;
посылку второго временного значения к клавиатуре;
создание первого начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и третьего начального значения, которое известно как клавиатуре, так и компоненту; и
создание второго начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и четвертого начального значения, которое известно как клавиатуре, так и компоненту.

14. Считываемый компьютером носитель по п.10, в котором упомянутые тройной DES и цепочка блоков шифрования шифруют данные в блоки, имеющие заданный размер, и в котором клавиатура передает данные в блоках упомянутого заданного размера.

15. Клавиатура, содержащая:
одну или несколько ячеек запоминающего устройства, которые хранят первое начальное значение и ключ;
компонент шифрования, который приспособлен для:
приема первого временного значения от получателя через интерфейс связи;
посылки второго временного значения к получателю через интерфейс связи и
создания первого начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и второго начального значения, которое известно как клавиатуре, так и компоненту,
причем упомянутый компонент шифрования шифрует входные данные, принимаемые в клавиатуре, тройным DES и цепочкой блоков шифрования с использованием упомянутого ключа и упомянутого первого начального значения, посредством чего шифрованные данные создаются на основе упомянутых входных данных; и
интерфейс связи, который передает упомянутые шифрованные данные к устройству, внешнему относительно клавиатуры, причем упомянутые шифрованные данные предназначаются для получателя, который знает упомянутое первое начальное значение и упомянутый ключ.

16. Клавиатура по п.15, в которой компонент шифрования дополнительно создает множество кодов аутентификации сообщений, соответствующих шифрованным данным или входным данным, причем упомянутые коды аутентификации сообщений созданы тройным DES и цепочкой блоков шифрования с использованием упомянутого ключа и второго начального значения, отличного от упомянутого первого начального значения.

17. Клавиатура по п.15, в которой клавиатура является клавиатурой USB.

18. Клавиатура по п.15, в которой интерфейс связи передает упомянутые шифрованные данные драйверу, который управляется первой операционной системой, которая выполняется на упомянутом устройстве, после чего упомянутые шифрованные данные передаются упомянутому получателю, причем упомянутым получателем является вторая операционная система, которая выполняется на упомянутом устройстве, или программа, которая выполняется под управлением упомянутой второй операционной системы, причем упомянутая вторая операционная система не доверяет, по меньшей мере в некотором отношении, поведению первой операционной системы.

19. Клавиатура по п.15, в которой входные данные, принимаемые в клавиатуре, содержат множество индивидуальных нажатий клавиш, и в которой компонент шифрования отдельно шифрует каждое из индивидуальных нажатий клавиш.

20. Считываемый компьютером носитель, содержащий записанные на нем, выполняемые компьютером команды для выполнения способа, дающего клавиатуре возможность быть вовлеченной в безопасную связь с компонентом, внешним по отношению к клавиатуре, причем этот способ предусматривает этапы:
посылку первого временного значения к упомянутому компоненту;
посылку второго временного значения к упомянутому компоненту и
создание первого начального значения посредством применения тройного DES и цепочки блоков шифрования к комбинации первого временного значения и второго временного значения с использованием ключа и второго начального значения, которое известно как клавиатуре, так и упомянутому компоненту,
прием множества данных, введенных нажатиями клавиш;
шифрование входных данных, введенных каждым нажатием клавиш, тройным DES и цепочкой блоков шифрования с использованием ключа и первого начального значения, причем этот ключ и первое начальное значение известны как клавиатуре, так и упомянутому компоненту, посредством чего возникает множество шифрованных данных, соответствующих нажатиям клавиш; и
передачу шифрованных данных, соответствующих нажатиям клавиш, к упомянутому компоненту.

21. Считываемый компьютером носитель по п.20, в котором упомянутые тройной DES и цепочка блоков шифрования шифруют данные в блоки, имеющие заданный размер, и в котором клавиатура передает данные в блоках упомянутого заданного размера.

22. Считываемый компьютером носитель по п.20, в котором способ дополнительно предусматривает:
создание множества кодов аутентификации сообщений тройным DES и цепочкой блоков шифрования с использованием упомянутого ключа и второго начального значения, отличного от упомянутого первого начального значения, причем множество кодов аутентификации сообщений соответствует множеству нажатий клавиш; и
передачу кодов аутентификации сообщений к компоненту.

23. Способ безопасного ввода данных в компонент программного обеспечения, предусматривающий:
обеспечение компонента программного обеспечения,
обеспечение клавиатуры,
причем компонент программного обеспечения содержит:
ключ;
первое начальное значение и
выполняемые компьютером команды, которые позволяют программному обеспечению:
послать первое временное значение к упомянутой клавиатуре;
принять второе временное значение от упомянутой клавиатуры;
создать второе начальное значение на основе упомянутого первого временного значения, упомянутого второго временного значения и упомянутого первого начального значения и
дешифровать шифрованные данные, принятые от клавиатуры, с использованием ключа и второго начального значения;
причем упомянутая клавиатура содержит:
аппаратное обеспечение для сохранения или обеспечения доступа к копии ключа;
аппаратное обеспечение для сохранения или обеспечения доступа к копии первого начального значения;
аппаратное или программное обеспечение, которое позволяет клавиатуре:
принять первое временное значение от компонента программного обеспечения;
послать второе временное значение к упомянутому компоненту программного обеспечения и
создать второе начальное значение на основе упомянутого первого временного значения, упомянутого второго временного значения и упомянутого первого начального значения; и
создать шифрованные данные посредством шифрования входных данных, принятых в клавиатуре, с использованием ключа и второго начального значения.

24. Способ по п.23, в котором упомянутая клавиатура дополнительно содержит аппаратное или программное обеспечение, которое позволяет клавиатуре:
создать третье начальное значение на основе упомянутого первого временного значения, упомянутого второго временного значения и упомянутого первого начального значения, причем упомянутое третье начальное значение отличается от упомянутого второго начального значения; и
создать код аутентификации сообщений с использованием ключа и третьего начального значения;
компонент программного обеспечения дополнительно содержит выполняемые компьютером команды для:
создания упомянутого третьего начального значения на основе упомянутого первого временного значения, упомянутого второго временного значения и упомянутого первого начального значения и
верификации кода аутентификации сообщений с использованием ключа и третьего начального значения.

25. Способ по п.23, в котором шифрованные данные создаются посредством применения тройного DES с цепочкой блоков шифрования к входным данным с использованием ключа и второго начального значения.

26. Способ по п.23, в котором клавиатура приспособлена для индивидуального шифрования каждого нажатия клавиши.

РИСУНКИ

Categories: BD_2371000-2371999