В этой лекции мы кратко рассмотрим стандартную нотацию для определения типов и значений данных –
При описании протоколов взаимодействия или систем, которые совместно используют определенные структуры данных, требуется определить типы данных, передаваемые этими протоколами или совместно используемые различными системами. Для того чтобы определить эти типы данных, требуется специальная нотация. Такой нотацией является
Данная нотация, с одной стороны, интуитивно понятна, а с другой стороны, может использоваться как протоколами, так и программными системами. Неотъемлемой частью
Ниже приведены базовые правила обозначений в
В -- и заканчивается концом строки), так и на нескольких строках (в этом случае он начинается с /* и заканчивается */ ). Идентификаторы (имена значений и полей) и имена типов состоят из букв, цифр и пробелов. Идентификаторы начинаются со строчной буквы, а имена типов – с прописной. В
[] – квадратные скобки указывают на то, что терм является необязательным;
{} – фигурные скобки группируют родственные термы;
| – вертикальная черта выделяет альтернативные значения;
... – многоточие обозначает повторения;
= – знак равенства описывает терм как подтерм.
CHOICE, ANY и некоторые другие. Типам и значениям могут присваиваться имена с помощью оператора присваивания " ::= ". Эти имена в дальнейшем могут использоваться для определения других типов и значений.
Определены следующие простые типы:
INTEGER – любое целое число;
– произвольная строка бит;
– произвольная
NULL – 0 ;
– последовательность компонентов, однозначно идентифицирующих объект;
PrintableString – последовательность печатных символов;
IA5String – произвольная строка символов IA5 (ASCII);
UTCTime – универсальное время (по Гринвичу; GMT).
Для строчных типов может быть введено ограничение на максимальный размер.
В
– упорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные
– упорядоченный набор из нуля или более значений данного типа
– неупорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные
– неупорядоченный набор из нуля или более значений данного типа
Структурные типы могут иметь необязательные компоненты, в том числе со значениями по умолчанию.
Типы могут быть помечены явно или неявно. Неявно помеченные типы получаются из других типов путем изменения метки. Для неявной пометки используется ключевое слово IMPLICIT. Явно помеченные типы получаются из других типов путем добавления внешней метки. Для явной пометки используется ключевое слово EXPLICIT. Помеченный явно тип – это структурный тип, состоящий из одного существующего типа и тега. Пометка (
TaggedType ::= Tag Type
| Tag IMPLICIT Type
| Tag EXPLICIT Type
Tag ::= [ Class ClassNumber ]
ClassNumber ::= Number | DefinedValue
Class ::= UNIVERSAL
| APPLICATION
| PRIVATE
| empty
DefinedValue должно быть типом целого и иметь неотрицательное значение.
обозначает битовые последовательности произвольной длины (включая ноль) имеет формат.
BIT STRING
Например, тип SubjectPublicKeyInfo имеет компонент PublicKey типа :
SubjectPublicKeyInfo ::= SEQUENCE {
Algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
Тип IA5String представляет любые последовательности IA5-символов (международный алфавит 5 – эквивалентно ASCII). Длина строки может быть любой, включая нуль. Этот тип используется для адресов электронной почты и неструктурированных имен. Нотация типа IA5String имеет простой формат.
IA5String
Тип INTEGER представляет любые целые числа (положительные, отрицательные или 0 ). Тип INTEGER используется для номеров версий, криптографических параметров (показателей, модулей и т.п.) и типов RSAPublicKey, RSAPrivatKey, DHParameter, PBEParameter. Нотация типа INTEGER имеет формат:
INTEGER [{identifier1(value1)
... identifiern(valuen) }]
где identifier1... identifiern являются необязательными идентификаторами, а value1... valuen целые значения. Например, Version является целым типом со значением 0:
Version ::= INTEGER { v1988(0) }
Идентификатору v1988 поставлено в соответствие значение 0. Тип Certificate использует идентификатор v1988 для присвоения значения по умолчанию компоненту version:
Certificate version Version DEFAULT v1988, ...
Тип NULL обозначает нулевую величину и предназначен для использования в качестве параметра алгоритмов. Нотация для типа NULL имеет формат:
NULL
служит для обозначения идентификаторов, которые представляют собой последовательность целочисленных компонентов, идентифицирующих определенные объекты, например, алгоритм или атрибут имени каталога. Значение может содержать любое число неотрицательных компонент. Этот тип не относится в числу строчных определяются при регистрации.
Нотация имеет формат:
OBJECT IDENTIFIER
Нотация значения имеет вид:
{ [identifier] component1 ... componentn}
componenti = identifieri |
identifieri (valuei) |
valuei
где identifier, identifier1, ... identifiern являются идентификаторами, а value1..., valuen – целые числа.
Например, приведенные ниже величины идентификаторов объектов присвоены RSA
{ iso(1) member-body(2) 840 113549 }
{ 1 2 840 113549 }
Ниже приведены некоторые идентификаторы объектов и их значения.
| Величина идентификатора объекта | Назначение |
|---|---|
{ 1 2 } |
Члены ISO |
{ 1 2 840 } |
US (ANSI) |
{ 1 2 840 113549} |
RSA |
служит для представления произвольных может иметь любую длину, включая нуль. используется для представления сообщений имеет формат.
OCTET STRING [SIZE ({size |
size1..size2})]
где size, size1 и size2 – необязательные ограничения размера. В формате строка октетов должна иметь size октетов. В формате size1 и size2. Например, тип PBEParameter имеет компоненту типа :
PBEParameter ::= SEQUENCE {
salt OCTET STRING SIZE (8),
iterationCount INTEGER
}
Здесь размер компоненты всегда равен 8 октетам.
Тип PrintableString предназначен для описания произвольных последовательностей печатных символов из набора:
A,B,...,Z a,b,...,z 0,1,...,9 (пробел) ‘ () +, – . / : = ?
Этот тип используется для представления атрибутов имен. Нотация типа PrintableString имеет вид:
PrintableString
Этот тип служит для объединения одной или более альтернатив. Нотация типа CHOICE имеет формат
CHOICE {
[identifier1] Type1,
...,
[identifiern] Typen
}
где identifier1, ..., identifiern являются необязательными идентификаторами альтернатив, а типы Type1, ..., Typen – альтернативы. Идентификаторы нужны для документирования и не играют какой-либо роли при представлении. Рассмотрим пример типа ExtendedCertificateOrCertificate, который относится к типу CHOICE.
ExtendedCertificateOrCertificate ::=
CHOICE {
certificate Certificate,
extendedCertificate [0]
IMPLICIT ExtendedCertificate
}
Здесь идентификаторами для альтернатив являются certificate и extendedCertificate, а сами альтернативы представлены типами Certificate и [0] IMPLICIT ExtendedCertificate.
обозначает упорядоченную последовательность одного или более типов имеет вид:
SEQUENCE {
[identifier1] Type1 [{OPTIONAL |
DEFAULT value1}],
...,
[identifiern] Typen [{OPTIONAL |
DEFAULT valuen}],
}
где identifier1, ..., identifiern являются необязательными идентификаторами компонентов, Type1, ..., Typen – типы компонентов, а value1,..., valuen – необязательные значения компонентов по умолчанию. Квалификатор OPTIONAL указывает на то, что компонент является необязательным. Квалификатор DEFAULT говорит о том, что компонент является необязательным и ему присваивается определенное значение, если компонент отсутствует. Например, тип Validity относится к типу и имеет два компонента.
Validity ::= SEQUENCE {
start UTCTime,
end UTCTime
}
Здесь start и end являются идентификаторами компонентов, а типом компонентов служит UTCTime.
обозначает упорядоченную последовательность из нуля или более значений компонентов данного типа имеет вид:
SEQUENCE OF Type
Так, например, тип RNDSequence состоит из нуля или более значений компонентов типа RelativeDistinguishedName.
RNDSequence ::= SEQUENCE OF
RelativeDistinguishedName
представляет собой неупорядоченное объединение из одного или более типов имеет вид.
SET {
[identifier1] Type1
[{OPTIONAL | DEFAULT value1}],
...,
[identifiern] Typen
[{OPTIONAL | DEFAULT valuen}],
}
где identifier1, ..., identifiern являются необязательными идентификаторами компонентов, Type1, ..., Typen – типы компонентов, а value1,..., valuen – необязательные значения компонентов по умолчанию. Квалификатор OPTIONAL указывает на то, что значения компонентов являются необязательными. Квалификатор DEFAULT говорит о том, что наличие компонента является необязательным, и ему присваивается определенное значение, если компонент отсутствует.
является неупорядоченным набором, состоящим из нуля или более значений компонентов заданного типа имеет вид:
SET OF Type
где Type – тип. Так, тип RelativeDistinguishedName состоит из нуля или более компонентов типа AttributeValueAssertion.
RelativeDistinguishedName ::= SET OF
AttributeValueAssertion
Тип ANY обозначает произвольную величину произвольного типа, где произвольный тип, возможно, был определен при регистрации идентификатора объекта или является целочисленным индексом. Нотация типа ANY имеет формат:
ANY [DEFINED BY identifier]
где identifier – необязательный идентификатор. Форма ANY DEFINED BY identifier может появиться только в компоненте типа SEQUNCE или , для которого identifier определяет какой-то другой компонент и этот компонент имеет тип INTEGER или . В этой форме настоящий тип задается значением этого компонента. Например, тип AlgorithmIdentifier имеет компонент типа ANY:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameter ANY DEFINED BY
algorithm OPTIONAL
}
Здесь настоящий тип компонента parameter зависит от значения компонента algorithm. Настоящий тип будет определен при регистрации идентификатора объекта для компонента algorithm.
Тип UTCTime служит для обозначения универсального местного времени с привязкой по Гринвичу (GMT). Значение UTCTime определяет местное время с точностью минут или секунд и временной сдвиг по отношению к GMT. Оно может иметь следующие формы:
YYMMDDhhmmZ YYMMDDhhmm+hh`mm` YYMMDDhhmm-hh`mm` YYMMDDhhmmssZ YYMMDDhhmmss+ hh`mm` YYMMDDhhmmss- hh`mm`
где
YY – младшие две цифры года
ММ – код месяца (01 – 12)
DD – код дня (01 – 31)
hh – код часа (00 – 23)
mm – код минут (00 – 59)
ss – код секунд (00 – 59)
Z – означает местное время по Гринвичу, + указывает на то, что местное время отстает от GMT, а – указывает на то, что местное время опережает GMT.
hh` – абсолютное значение смещения по отношению к GMT в часах
mm` – абсолютное смещение по отношению к GMT в минутах.
Цифровая подпись обеспечивает аутентификацию участника, а также служит доказательством того, что электронное сообщение было послано конкретным участником. Второе свойство является более сильным, чем аутентификация, так как аутентификация может выполняться и на основе разделяемого секрета.
Сначала определим ключевые термины, используемые в
Целью
Основным понятием
Мы будем рассматривать
CCITT (Consultative Committee for International Telegraphy and
Стандарт Х.509 первоначально являлся частью стандарта Х.500 и описывал основные требования к аутентификации в Х.500 Директории. Но Х.509 используется не только в контексте сервиса Директории Х.500.
Стандарты ITU-T X.509 и ISO/IEC 9594-8, которые впервые были опубликованы в 1988 году как часть рекомендаций Х.500 Директории, определили формат
Опыт реализации первой и второй версий говорит о том, что форматы
Однако расширения стандарта ISO/IEC, ITU-T и ANSI X9 являются очень общими, чтобы применять их на практике. Для того чтобы разрабатывать интероперабельные реализации систем, взаимно использующие
В табл. 13.2 рассмотрены основные элементы
| Пояснение | Параметры сертификата | Версия | ||
|---|---|---|---|---|
| Целое число, идентифицирующее данный сертификат, которое должно быть уникальным среди всех сертификатов, выпущенных данным СА | Серийный номер | v1 | v2 | v3 |
| СА, который создал и подписал сертификат | Имя СА, выпустившего сертификат | |||
| Период действительности состоит из двух временных значений, в промежутке между которыми сертификат считается действительным | Не раньше | |||
| Не позже | ||||
| Конечный участник, для которого создан данный сертификат | Имя субъекта (конечного участника) | |||
| Открытый ключ субъекта и алгоритм, для которого этот ключ был создан | Алгоритм | |||
| Параметры | ||||
| Открытый ключ субъекта | ||||
| Уникальный идентификатор СА | ||||
| Уникальный идентификатор субъекта | ||||
| Расширения | ||||
| Подпись охватывает все остальные поля сертификата и состоит из хэш-кода других полей, зашифрованного закрытым ключом СА | Подпись, созданная закрытым ключом СА для всех полей сертификата | Все версии | ||
Часто используется следующая нотация для обозначения
СА << A >>
– А, выданный сертификационным центром
Так как
В любом случае если В имеет А, В уверен, что сообщение, которое он расшифровывает открытым ключом А, никто не мог просмотреть, и что сообщение, подписанное закрытым ключом А, не изменялось.
При большом количестве пользователей неразумно подписывать
Теперь предположим, что А получил Х1, и В получил Х2. Если А не знает безопасным способом открытый ключ Х2, то В, полученный от Х2, для него бесполезен. А может прочитать В, но не в состоянии проверить подпись. Тем не менее, если два САs могут безопасно обмениваться своими открытыми ключами, возможна следующая процедура для получения А открытого ключа В.
А получает из директории Х2, подписанный Х1. Так как А знает открытый ключ Х1 надежным способом, А может получить открытый ключ Х2 из данного Х1 в А возвращается обратно в директорию и получает В, подписанный Х2. Так как А теперь имеет открытый ключ Х2 надежным способом, А может проверить подпись и безопасно получить открытый ключ В.Для получения открытого ключа В А использует цепочку
Х1 << Х2 >> Х2 << B >>
Аналогично В может получить открытый ключ А с помощью такой же цепочки:
Х2 << Х1 >> Х1 << А >>
Данная схема не обязательно ограничена цепочкой из двух CАs произвольной длины. Цепочка, содержащая N элементов, выглядит следующим образом:
Х1 << Х2 >> Х2 << Х3 >> . . . ХN << B >>
В этом случае каждая пара САs в цепочке (Хi , Хi+1) должна создать
Все эти необходимо разместить в директории, и пользователи должны иметь информацию о том, как они связаны друг с другом, чтобы получить путь к
Мы будем использовать следующие термины и понятия.
Причины, которые объясняют наличие
Некоторые организационные причины для использования
Основой для достижения безопасности в Internet являлось создание протоколов безопасности, таких как TLS, SSH и IPSec. Все эти протоколы используют криптографию с открытым ключом для предоставления таких сервисов как конфиденциальность, целостность данных, аутентификация исходных данных и невозможность отказа. Целью
Пользователи систем, основанных на открытом ключе, должны быть уверены, что когда они используют открытый ключ, субъект, с которым они связываются, является собственником соответствующего закрытого ключа. Эта уверенность достигается благодаря использованию PKCs, которые являются структурами данных, связывающих значения открытого ключа с субъектами. Связывание обеспечивается при наличии доверенного
PKC имеет ограниченное время жизни, которое указывается в подписанном содержимом. Так как подпись и своевременность могут быть независимо проверены клиентом, использующим
PKCs применяются в процессе проверки действительности подписанных данных. Имеется определенная специфика, относящаяся к используемому алгоритму, но общий процесс выглядит следующим образом (заметим, что не существует особенностей, относящихся к порядку, в котором должны выполняться перечисленные проверки; разработчики свободны в выборе наиболее эффективного способа для своих систем).
Замечание: конечно, возможно, что данные были подписаны кем-то еще, если, например, закрытый ключ подписывающей стороны скомпрометирован. Безопасность зависит от всех частей системы, использующей
Множество аппаратуры, ПО, людей, политик и процедур, необходимых для создания, управления, хранения, распределения и отмены PKCs, основываясь на криптографии с открытым ключом.
На рис.13.1 показан упрощенный взгляд на архитектурную модель
(рис 13.1) Участники PKI В этой лекции мы кратко рассмотрим стандартную нотацию для определения типов и значений данных –
При описании протоколов взаимодействия или систем, которые совместно используют определенные структуры данных, требуется определить типы данных, передаваемые этими протоколами или совместно используемые различными системами. Для того чтобы определить эти типы данных, требуется специальная нотация. Такой нотацией является
Данная нотация, с одной стороны, интуитивно понятна, а с другой стороны, может использоваться как протоколами, так и программными системами. Неотъемлемой частью
Ниже приведены базовые правила обозначений в
В -- и заканчивается концом строки), так и на нескольких строках (в этом случае он начинается с /* и заканчивается */ ). Идентификаторы (имена значений и полей) и имена типов состоят из букв, цифр и пробелов. Идентификаторы начинаются со строчной буквы, а имена типов – с прописной. В
[] – квадратные скобки указывают на то, что терм является необязательным;
{} – фигурные скобки группируют родственные термы;
| – вертикальная черта выделяет альтернативные значения;
... – многоточие обозначает повторения;
= – знак равенства описывает терм как подтерм.
CHOICE, ANY и некоторые другие. Типам и значениям могут присваиваться имена с помощью оператора присваивания " ::= ". Эти имена в дальнейшем могут использоваться для определения других типов и значений.
Определены следующие простые типы:
INTEGER – любое целое число;
– произвольная строка бит;
– произвольная
NULL – 0 ;
– последовательность компонентов, однозначно идентифицирующих объект;
PrintableString – последовательность печатных символов;
IA5String – произвольная строка символов IA5 (ASCII);
UTCTime – универсальное время (по Гринвичу; GMT).
Для строчных типов может быть введено ограничение на максимальный размер.
В
– упорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные
– упорядоченный набор из нуля или более значений данного типа
– неупорядоченный набор из одного или более типов, некоторые из которых могут быть объявлены как необязательные
– неупорядоченный набор из нуля или более значений данного типа
Структурные типы могут иметь необязательные компоненты, в том числе со значениями по умолчанию.
Типы могут быть помечены явно или неявно. Неявно помеченные типы получаются из других типов путем изменения метки. Для неявной пометки используется ключевое слово IMPLICIT. Явно помеченные типы получаются из других типов путем добавления внешней метки. Для явной пометки используется ключевое слово EXPLICIT. Помеченный явно тип – это структурный тип, состоящий из одного существующего типа и тега. Пометка (
TaggedType ::= Tag Type
| Tag IMPLICIT Type
| Tag EXPLICIT Type
Tag ::= [ Class ClassNumber ]
ClassNumber ::= Number | DefinedValue
Class ::= UNIVERSAL
| APPLICATION
| PRIVATE
| empty
DefinedValue должно быть типом целого и иметь неотрицательное значение.
обозначает битовые последовательности произвольной длины (включая ноль) имеет формат.
BIT STRING
Например, тип SubjectPublicKeyInfo имеет компонент PublicKey типа :
SubjectPublicKeyInfo ::= SEQUENCE {
Algorithm AlgorithmIdentifier,
PublicKey BIT STRING
}
Тип IA5String представляет любые последовательности IA5-символов (международный алфавит 5 – эквивалентно ASCII). Длина строки может быть любой, включая нуль. Этот тип используется для адресов электронной почты и неструктурированных имен. Нотация типа IA5String имеет простой формат.
IA5String
Тип INTEGER представляет любые целые числа (положительные, отрицательные или 0 ). Тип INTEGER используется для номеров версий, криптографических параметров (показателей, модулей и т.п.) и типов RSAPublicKey, RSAPrivatKey, DHParameter, PBEParameter. Нотация типа INTEGER имеет формат:
INTEGER [{identifier1(value1)
... identifiern(valuen) }]
где identifier1... identifiern являются необязательными идентификаторами, а value1... valuen целые значения. Например, Version является целым типом со значением 0:
Version ::= INTEGER { v1988(0) }
Идентификатору v1988 поставлено в соответствие значение 0. Тип Certificate использует идентификатор v1988 для присвоения значения по умолчанию компоненту version:
Certificate version Version DEFAULT v1988, ...
Тип NULL обозначает нулевую величину и предназначен для использования в качестве параметра алгоритмов. Нотация для типа NULL имеет формат:
NULL
служит для обозначения идентификаторов, которые представляют собой последовательность целочисленных компонентов, идентифицирующих определенные объекты, например, алгоритм или атрибут имени каталога. Значение может содержать любое число неотрицательных компонент. Этот тип не относится в числу строчных определяются при регистрации.
Нотация имеет формат:
OBJECT IDENTIFIER
Нотация значения имеет вид:
{ [identifier] component1 ... componentn}
componenti = identifieri |
identifieri (valuei) |
valuei
где identifier, identifier1, ... identifiern являются идентификаторами, а value1..., valuen – целые числа.
Например, приведенные ниже величины идентификаторов объектов присвоены RSA
{ iso(1) member-body(2) 840 113549 }
{ 1 2 840 113549 }
Ниже приведены некоторые идентификаторы объектов и их значения.
| Величина идентификатора объекта | Назначение |
|---|---|
{ 1 2 } |
Члены ISO |
{ 1 2 840 } |
US (ANSI) |
{ 1 2 840 113549} |
RSA |
служит для представления произвольных может иметь любую длину, включая нуль. используется для представления сообщений имеет формат.
OCTET STRING [SIZE ({size |
size1..size2})]
где size, size1 и size2 – необязательные ограничения размера. В формате строка октетов должна иметь size октетов. В формате size1 и size2. Например, тип PBEParameter имеет компоненту типа :
PBEParameter ::= SEQUENCE {
salt OCTET STRING SIZE (8),
iterationCount INTEGER
}
Здесь размер компоненты всегда равен 8 октетам.
Тип PrintableString предназначен для описания произвольных последовательностей печатных символов из набора:
A,B,...,Z a,b,...,z 0,1,...,9 (пробел) ‘ () +, – . / : = ?
Этот тип используется для представления атрибутов имен. Нотация типа PrintableString имеет вид:
PrintableString
Этот тип служит для объединения одной или более альтернатив. Нотация типа CHOICE имеет формат
CHOICE {
[identifier1] Type1,
...,
[identifiern] Typen
}
где identifier1, ..., identifiern являются необязательными идентификаторами альтернатив, а типы Type1, ..., Typen – альтернативы. Идентификаторы нужны для документирования и не играют какой-либо роли при представлении. Рассмотрим пример типа ExtendedCertificateOrCertificate, который относится к типу CHOICE.
ExtendedCertificateOrCertificate ::=
CHOICE {
certificate Certificate,
extendedCertificate [0]
IMPLICIT ExtendedCertificate
}
Здесь идентификаторами для альтернатив являются certificate и extendedCertificate, а сами альтернативы представлены типами Certificate и [0] IMPLICIT ExtendedCertificate.
обозначает упорядоченную последовательность одного или более типов имеет вид:
SEQUENCE {
[identifier1] Type1 [{OPTIONAL |
DEFAULT value1}],
...,
[identifiern] Typen [{OPTIONAL |
DEFAULT valuen}],
}
где identifier1, ..., identifiern являются необязательными идентификаторами компонентов, Type1, ..., Typen – типы компонентов, а value1,..., valuen – необязательные значения компонентов по умолчанию. Квалификатор OPTIONAL указывает на то, что компонент является необязательным. Квалификатор DEFAULT говорит о том, что компонент является необязательным и ему присваивается определенное значение, если компонент отсутствует. Например, тип Validity относится к типу и имеет два компонента.
Validity ::= SEQUENCE {
start UTCTime,
end UTCTime
}
Здесь start и end являются идентификаторами компонентов, а типом компонентов служит UTCTime.
обозначает упорядоченную последовательность из нуля или более значений компонентов данного типа имеет вид:
SEQUENCE OF Type
Так, например, тип RNDSequence состоит из нуля или более значений компонентов типа RelativeDistinguishedName.
RNDSequence ::= SEQUENCE OF
RelativeDistinguishedName
представляет собой неупорядоченное объединение из одного или более типов имеет вид.
SET {
[identifier1] Type1
[{OPTIONAL | DEFAULT value1}],
...,
[identifiern] Typen
[{OPTIONAL | DEFAULT valuen}],
}
где identifier1, ..., identifiern являются необязательными идентификаторами компонентов, Type1, ..., Typen – типы компонентов, а value1,..., valuen – необязательные значения компонентов по умолчанию. Квалификатор OPTIONAL указывает на то, что значения компонентов являются необязательными. Квалификатор DEFAULT говорит о том, что наличие компонента является необязательным, и ему присваивается определенное значение, если компонент отсутствует.
является неупорядоченным набором, состоящим из нуля или более значений компонентов заданного типа имеет вид:
SET OF Type
где Type – тип. Так, тип RelativeDistinguishedName состоит из нуля или более компонентов типа AttributeValueAssertion.
RelativeDistinguishedName ::= SET OF
AttributeValueAssertion
Тип ANY обозначает произвольную величину произвольного типа, где произвольный тип, возможно, был определен при регистрации идентификатора объекта или является целочисленным индексом. Нотация типа ANY имеет формат:
ANY [DEFINED BY identifier]
где identifier – необязательный идентификатор. Форма ANY DEFINED BY identifier может появиться только в компоненте типа SEQUNCE или , для которого identifier определяет какой-то другой компонент и этот компонент имеет тип INTEGER или . В этой форме настоящий тип задается значением этого компонента. Например, тип AlgorithmIdentifier имеет компонент типа ANY:
AlgorithmIdentifier ::= SEQUENCE {
algorithm OBJECT IDENTIFIER,
parameter ANY DEFINED BY
algorithm OPTIONAL
}
Здесь настоящий тип компонента parameter зависит от значения компонента algorithm. Настоящий тип будет определен при регистрации идентификатора объекта для компонента algorithm.
Тип UTCTime служит для обозначения универсального местного времени с привязкой по Гринвичу (GMT). Значение UTCTime определяет местное время с точностью минут или секунд и временной сдвиг по отношению к GMT. Оно может иметь следующие формы:
YYMMDDhhmmZ YYMMDDhhmm+hh`mm` YYMMDDhhmm-hh`mm` YYMMDDhhmmssZ YYMMDDhhmmss+ hh`mm` YYMMDDhhmmss- hh`mm`
где
YY – младшие две цифры года
ММ – код месяца (01 – 12)
DD – код дня (01 – 31)
hh – код часа (00 – 23)
mm – код минут (00 – 59)
ss – код секунд (00 – 59)
Z – означает местное время по Гринвичу, + указывает на то, что местное время отстает от GMT, а – указывает на то, что местное время опережает GMT.
hh` – абсолютное значение смещения по отношению к GMT в часах
mm` – абсолютное смещение по отношению к GMT в минутах.
Цифровая подпись обеспечивает аутентификацию участника, а также служит доказательством того, что электронное сообщение было послано конкретным участником. Второе свойство является более сильным, чем аутентификация, так как аутентификация может выполняться и на основе разделяемого секрета.
Сначала определим ключевые термины, используемые в
Целью
Основным понятием
Мы будем рассматривать
CCITT (Consultative Committee for International Telegraphy and
Стандарт Х.509 первоначально являлся частью стандарта Х.500 и описывал основные требования к аутентификации в Х.500 Директории. Но Х.509 используется не только в контексте сервиса Директории Х.500.
Стандарты ITU-T X.509 и ISO/IEC 9594-8, которые впервые были опубликованы в 1988 году как часть рекомендаций Х.500 Директории, определили формат
Опыт реализации первой и второй версий говорит о том, что форматы
Однако расширения стандарта ISO/IEC, ITU-T и ANSI X9 являются очень общими, чтобы применять их на практике. Для того чтобы разрабатывать интероперабельные реализации систем, взаимно использующие
В табл. 13.2 рассмотрены основные элементы
| Пояснение | Параметры сертификата | Версия | ||
|---|---|---|---|---|
| Целое число, идентифицирующее данный сертификат, которое должно быть уникальным среди всех сертификатов, выпущенных данным СА | Серийный номер | v1 | v2 | v3 |
| СА, который создал и подписал сертификат | Имя СА, выпустившего сертификат | |||
| Период действительности состоит из двух временных значений, в промежутке между которыми сертификат считается действительным | Не раньше | |||
| Не позже | ||||
| Конечный участник, для которого создан данный сертификат | Имя субъекта (конечного участника) | |||
| Открытый ключ субъекта и алгоритм, для которого этот ключ был создан | Алгоритм | |||
| Параметры | ||||
| Открытый ключ субъекта | ||||
| Уникальный идентификатор СА | ||||
| Уникальный идентификатор субъекта | ||||
| Расширения | ||||
| Подпись охватывает все остальные поля сертификата и состоит из хэш-кода других полей, зашифрованного закрытым ключом СА | Подпись, созданная закрытым ключом СА для всех полей сертификата | Все версии | ||
Часто используется следующая нотация для обозначения
СА << A >>
– А, выданный сертификационным центром
Так как
В любом случае если В имеет А, В уверен, что сообщение, которое он расшифровывает открытым ключом А, никто не мог просмотреть, и что сообщение, подписанное закрытым ключом А, не изменялось.
При большом количестве пользователей неразумно подписывать
Теперь предположим, что А получил Х1, и В получил Х2. Если А не знает безопасным способом открытый ключ Х2, то В, полученный от Х2, для него бесполезен. А может прочитать В, но не в состоянии проверить подпись. Тем не менее, если два САs могут безопасно обмениваться своими открытыми ключами, возможна следующая процедура для получения А открытого ключа В.
А получает из директории Х2, подписанный Х1. Так как А знает открытый ключ Х1 надежным способом, А может получить открытый ключ Х2 из данного Х1 в А возвращается обратно в директорию и получает В, подписанный Х2. Так как А теперь имеет открытый ключ Х2 надежным способом, А может проверить подпись и безопасно получить открытый ключ В.Для получения открытого ключа В А использует цепочку
Х1 << Х2 >> Х2 << B >>
Аналогично В может получить открытый ключ А с помощью такой же цепочки:
Х2 << Х1 >> Х1 << А >>
Данная схема не обязательно ограничена цепочкой из двух CАs произвольной длины. Цепочка, содержащая N элементов, выглядит следующим образом:
Х1 << Х2 >> Х2 << Х3 >> . . . ХN << B >>
В этом случае каждая пара САs в цепочке (Хi , Хi+1) должна создать
Все эти необходимо разместить в директории, и пользователи должны иметь информацию о том, как они связаны друг с другом, чтобы получить путь к
Мы будем использовать следующие термины и понятия.
Причины, которые объясняют наличие
Некоторые организационные причины для использования
Основой для достижения безопасности в Internet являлось создание протоколов безопасности, таких как TLS, SSH и IPSec. Все эти протоколы используют криптографию с открытым ключом для предоставления таких сервисов как конфиденциальность, целостность данных, аутентификация исходных данных и невозможность отказа. Целью
Пользователи систем, основанных на открытом ключе, должны быть уверены, что когда они используют открытый ключ, субъект, с которым они связываются, является собственником соответствующего закрытого ключа. Эта уверенность достигается благодаря использованию PKCs, которые являются структурами данных, связывающих значения открытого ключа с субъектами. Связывание обеспечивается при наличии доверенного
PKC имеет ограниченное время жизни, которое указывается в подписанном содержимом. Так как подпись и своевременность могут быть независимо проверены клиентом, использующим
PKCs применяются в процессе проверки действительности подписанных данных. Имеется определенная специфика, относящаяся к используемому алгоритму, но общий процесс выглядит следующим образом (заметим, что не существует особенностей, относящихся к порядку, в котором должны выполняться перечисленные проверки; разработчики свободны в выборе наиболее эффективного способа для своих систем).
Замечание: конечно, возможно, что данные были подписаны кем-то еще, если, например, закрытый ключ подписывающей стороны скомпрометирован. Безопасность зависит от всех частей системы, использующей
Множество аппаратуры, ПО, людей, политик и процедур, необходимых для создания, управления, хранения, распределения и отмены PKCs, основываясь на криптографии с открытым ключом.
На рис.13.1 показан упрощенный взгляд на архитектурную модель
(рис 13.1) Участники PKI Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.