Структура PKCS7-файла / Хабр

Структура PKCS7-файла / Хабр Электронная цифровая подпись

Возможно ли, что расширение имени файла написано неправильно?

Подобные расширения файлов в нашей базе данных:

.p7s – цифровая подпись pkcs # 7

В P7S файлы данных связаны с Microsoft Office Outlook. P7S Файл представляет собой цифровую подпись PKCS # 7. Цифровая подпись – это разновидность асимметричной криптографии. Для сообщений, отправленных через небезопасный канал, правильно реализованная цифровая подпись дает получателю основание полагать, что сообщение было отправлено заявленным отправителем.

Заявка:
Microsoft Office Outlook
Категория:
Дата файлы
Мим-тип:
приложение / pkcs7-подпись
Магия:
– / –
Псевдонимы:
PKCS # 7 Digital Signature связанные расширения:
.icm
Профиль соответствия цвета изображения
.spl
Буферные данные Windows
.shd
Заголовок тени Windows
.tvt
ThinkVantage Rescue and Recovery File
.pwm
Данные ThinkVantage Password Manager
.igb
Файл модели Google Планета Земля

Естественно, что другие приложения также могут использовать .p7s расширение файла. Даже вредоносные программы могут создавать .p7s файлы. Будьте особенно осторожны с .p7s файлы поступают из неизвестного источника!

Asn.1


Что же такое Cryptographic Message Syntax? Это

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

В стандарте описывается шесть типов данных: data, signedData, envelopedData, signedAndEnvelopedData, digestedData, and encryptedData. В данном топике я расскажу о типе signedData (данные с электронной подписью).

Прежде всего следует сказать, что стандартный p7s файл имеет ASN.1 структуру.ASN.1 — формат записи, с помощью которого можно описывать сложные структуры данных, состоящие из различных типов. Приведу краткую выдержку из своего старого топика про x.509 сертификаты:

ASN.1-кодировка описывается следующим правилом. Сперва записываются байты, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и лишь после этого следуют сами данные.

К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 0203 01 00 01.
Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.

В нашем случае, для описание простейшего самоподписанного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:


Подробное описание ASN.1 дано в статье

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

Microsoft outlook express отсутствует

При двойном щелчке P7S-файла может появиться диалоговое окно операционной системы с сообщением о том, что он «Не удается открыть этот тип файла». Обычно это означает, что Microsoft Outlook Express не установлен в %%os%%. Вы не сможете дважды щелкнуть, чтобы открыть свой P7S, так как ваша ОС не знает, что с ним делать.

Читайте также:  CryptoPro | КриптоПро ЭЦП Browser plug-in

Другие причины проблем при открытии p7s-файлов

Предполагая, что у вас установлена правильная версия Microsoft Outlook Express, другие проблемы могут помешать вам открывать P7S-файлы. Если у вас по-прежнему возникают проблемы с открытием P7S-файлов, могут возникнуть другие проблемы, препятствующие открытию этих файлов. К числу этих вопросов относятся:

Как мы открываем вложения .p7s в mail и какие файлы

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

Цель отправки сообщения с P7S заключается в том, что сообщение было отправлено может быть открыт только получателем, и его содержание не вносить изменения с момента отправки до доставки в папку «Входящие». Эти электронные письма .P7S шифруются с использованием криптографического протокола Стандарт криптографии с открытым ключом (PKCS).
Как правило, вам не нужно открывать файл .P7S, когда он сопровождает файл .PDF Secure / зашифрованный, Программа / приложения электронной почты он будет делать это автоматически, если вы вошли в учетную запись электронной почты, на которую было отправлено сообщение. Если приложение электронной почты не сможет описать цифровую подпись, тогда файл .p7s будет представлен как вложение.

Как открыть письмо, полученное по электронной почте, с зашифрованной электронной подписью .P7S

У вас не будет возможности просматривать сообщение с цифровой подписью .P7S при открытии электронной почты в интернет-браузере. Chrome, Safari. Firefox, интернет Explorer, По умолчанию сообщения, подписанные с помощью .P7S, или документы, сопровождаемые этим файлом, могут автоматически открываться из приложения электронной почты.

Приложения, которые могут открывать файлы .P7S

Windows ПК – Microsoft Перспективы и применение почта a Windows 10Mozilla Thunderbird si почтовый ящик.
macOS / Mac – Apple почта (настоящее заявление default pe macOS), Thunderbirt si почтовый ящик.
Linux – Mozilla Thunderbird.

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

Пользователи, которые получают документы для SEAP и не нуждаются в третьей стороне программного обеспечения. для просмотра документов .p7 и .p7m рекомендуется использовать его shellSAFE Verify.
shellSELF Verify – это приложение, способное проверять подписи с ключами RSA на 1024 или 2048 битах. Решение разработано certSIGN и может быть загружено с сайта разработчика.

Неверная версия microsoft outlook express

В некоторых случаях может быть более новая (или более старая) версия файла PKCS #7 Signature File Format, которая не поддерживается установленной версией приложения. Рекомендуется установить последнюю версию Microsoft Outlook Express из Microsoft Corporation.

Читайте также:  Основы HTTPS, TLS, SSL. Создание собственных X.509 сертификатов. Пример настройки TLSv1.2 в Spring Boot / Хабр

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

Операционные системы

DataTypes.net в настоящее время поддерживает следующие операционные системы:

Windows XP / Vista, Windows 7/8, Windows 10, CentOS, Debian GNU / Linux, Ubuntu Linux, FreeBSD, Mac OS X, iOS, Android

Если вы найдете информацию на этой странице полезной, пожалуйста, дайте ссылку на эту страницу.

Расширение файла .p7s часто дается неправильно!

Согласно поисковым запросам на нашем сайте, эти орфографические ошибки были самыми распространенными за последний год:

p7, p7c, p7e, p7x, p7z, pis, ps, ps7, pys

Структура p7s файла

приводится описание структуры файла содержащего сведения об ЭЦП.

   SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }


Согласно стандарту, файл с цифровой подписью в CSM формате должен содержать следующие поля:

Для того чтобы понять как это выглядит на практике подпишем произвольный набор байт тестовым сертификатом и сгенерируем p7s файл с типом SignedData.

Получившийся файл будет иметь ASN.1 структуру:


Используя

можно легко разобрать что скрывается за шестнадцатеричным кодом.

SEQUENCE {
   OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData)
   [0] {
      SEQUENCE {
         INTEGER 0x01 (1 decimal)
         SET {
            SEQUENCE {
               OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
               NULL 
            }
         }
         SEQUENCE {
            OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
            [0] {
               OCTETSTRING 540065007300740020006D00650073007300610067006500
            }
         }
         [0] {
            SEQUENCE {
               SEQUENCE {
                  [0] {
                     INTEGER 0x02 (2 decimal)
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                     NULL 
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  SEQUENCE {
                     UTCTime '150429123320Z'
                     UTCTime '150506123320Z'
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.12 (title)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String '[TEST] Test'
                        }
                     }
                  }
                  SEQUENCE {
                     SEQUENCE {
                        OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                        NULL 
                     }
                     BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F9
                     1E10250FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267D
                     E6F2DBE5C3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20
                     444B0203010001 : 0 unused bit(s)
                  }
                  [3] {
                     SEQUENCE {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.15 (keyUsage)
                           OCTETSTRING 030204F0
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage)
                           BOOLEAN TRUE
                           OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier)
                           OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier)
                           OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0
                        }
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                  NULL 
               }
               BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F
               3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3
               6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s)
            }
         }
         SET {
            SEQUENCE {
               INTEGER 0x01 (1 decimal)
               SEQUENCE {
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                  NULL 
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                  NULL 
               }
               OCTETSTRING 571404A32C015B61B957F002950A33E09475CA66DED090938AE21AFE6E0B39C9023850DE7C38482736E97
               BFF6CB4DBB0605CCD787854525499A9C42B28D7BAAD19B26D0D43B6231B5EDCB23E70FFB4681D1C3B6FD5A40D508F55
               457E047D2CC5C3803A2327D2E2B41A052ED13E3A1E9788D912AEB35649E93497EF4770E1669E
            }
         }
      }
   }
}

Начнем по порядку. Как видно из примера, p7s файл представляет собой одну большую структуру данных с типом SEQUENCE, включающую в себя все описанные в стандарте поля.Открывает блок тип данных OBJECTIDENTIFIER со значением 1.2.840.113549.1.7.2 (SignedData), который однозначно дает понять с какого рода объектом мы имеем дело.После чего один за другим следуют блоки:

Читайте также:  Чем открыть формат SIG: расширение файлов xml/pdf с ЭЦП

Помимо приведенных выше обязательных полей в объекте с типом SignedData могут использоваться опциональные поля, такие как signedAttributes, добавляемые в блок SignerInfo. SignedAttributes добавляются при вычислении хеш-значения от подписываемых данных, поэтому изменение этих полей делает подпись недействительной.Если блок SignedAttributes используется, то он должен содержать минимум два поля:

Рассмотрим еще один пример p7s файла, созданного с использованием SignedAttributes.

SEQUENCE {
   OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData)
   [0] {
      SEQUENCE {
         INTEGER 0x01 (1 decimal)
         SET {
            SEQUENCE {
               OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
               NULL 
            }
         }
         SEQUENCE {
            OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
            [0] {
               OCTETSTRING 540065007300740020006D00650073007300610067006500
            }
         }
         [0] {
            SEQUENCE {
               SEQUENCE {
                  [0] {
                     INTEGER 0x02 (2 decimal)
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                     NULL 
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  SEQUENCE {
                     UTCTime '150429123320Z'
                     UTCTime '150506123320Z'
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.12 (title)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String '[TEST] Test'
                        }
                     }
                  }
                  SEQUENCE {
                     SEQUENCE {
                        OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                        NULL 
                     }
                     BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F91E102
                     50FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267DE6F2DBE5C
                     3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20444B0203010001 : 0 unused bit(s)
                  }
                  [3] {
                     SEQUENCE {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.15 (keyUsage)
                           OCTETSTRING 030204F0
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage)
                           BOOLEAN TRUE
                           OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier)
                           OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier)
                           OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0
                        }
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                  NULL 
               }
               BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F
               3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3
               6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s)
            }
         }
         SET {
            SEQUENCE {
               INTEGER 0x01 (1 decimal)
               SEQUENCE {
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                  NULL 
               }
               [0] {
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType)
                     SET {
                        OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime)
                     SET {
                        UTCTime '150429124539Z'
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.4 (messageDigest)
                     SET {
                        OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                  NULL 
               }
               OCTETSTRING 21D1762506C25894B98E6BD3BB11566719AEBF642B7A4541494C45F181880D936ABC28774BA575C53CC
               1CB9551ABA21359FD3FA9013DE4242802674A1C304B2601183EA8015840EEF0D0D0312E361088725A255A869EEC394C
               826712F684E0BA22806BD14404EA1DD80601A8C1E6598F1CCF907EE2891FB58683EEEF121D2312
            }
         }
      }
   }
}

Этот пример отличается от предыдущего наличием дополнительного блока:

[0] {
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType)
                     SET {
                        OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime)
                     SET {
                        UTCTime '150429124539Z'
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.4 (messageDigest)
                     SET {
                        OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5
                     }
                  }
               }


Именно в нем содержатся SignedAttributes. Помимо двух обязательных атрибутов при подписи был использован атрибут signedTime, который хранит время подписи.

Выводы

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

Оцените статью
ЭЦП Эксперт
Добавить комментарий