Signature Creation
9/8/2008
Um assinatura digital é usado para verificação da origem de um documento eletrônico e para não-repúdio. O uso de uma assinatura digital não alteração de dados no arquivo. Em vez disso, um hash do documento é gerada que pode uma seja fornecida com o documento ou transmitidos separadamente. Assinaturas digitais usam um público-chave algoritmo.
Para criar um assinatura digital de um arquivo, executar o arquivo através de uma função hash e, em seguida, assinar o hash resultante com um chave particular. Uma maneira fácil para criar um assinatura digital de um arquivo é usar Signfile.exe, que está incluído no Construtor de expressões de plataforma Microsoft. Signfile.exe é uma ferramenta para assinar um arquivo executável com um chave particular fornecidos por um provedor de serviços de criptografia (CSP).
Signfile.exe usa o Seguro Hashing Algorithm (SHA) para calcular o criptográfico hash. SHA gera um 20-hash byte de uma seqüência de byte arbitrariamente tamanho. Signfile.exe PADs o hash conforme especificado pelo Public-Key Cryptography Standards #1 (PKCS1) e criptografa usando o algoritmo chave pública RSA. A chave comprimento módulo pode ser de 512 por 1.024 bits. A assinatura resultante é o mesmo tamanho como o módulo. Exemplo, a assinatura de uma chave 1,024 bit é 128 bytes. Signfile.exe em seguida, usa o ImageAddCertificate e ImageGetDigestStream Funções Microsoft® Windows NT® para incorporar a assinatura em um arquivo executável portátil (PE).
A seguinte lista mostra o conteúdo da memória de arquivo PE:
- Cabeçalho MS-DOS
- Deslocamento de cabeçalho do PE (deslocamento 0x3c)
- Cabeçalho do PE
- Cabeçalhos de seção
- Seção
- Depurar informações e certificados (se houver)
O cabeçalho do PE começa com um 4-seqüência de bytes, "PE\0\0", que identifica o cabeçalho MS-DOS®. O cabeçalho MS-DOS é seguido por um padrão cabeçalho Common Object File Format (COFF). Esse cabeçalho COFF é seguido por um opcional cabeçalho que está sempre presente nos arquivos .exe e .dll Windows. O último campo em um cabeçalho do PE é um opcional tabela Diretório dados. A seguinte tabela mostra o tamanho dos elementos de cabeçalho do PE.
Elemento cabeçalho do PE | Tamanho |
---|---|
"PE\0\0" |
4 bytes |
Cabeçalho COFF |
20 bytes |
Cabeçalho opcional; padrão para Arquivos Windows |
96 bytes |
Cabeçalho opcional; tabela Diretório dados |
Tamanho varia |
Cada entrada na tabela de Diretório dados consiste de um IMAGE_DATA_DIRECTORY estrutura. A quinta estrutura na tabela de Diretório dados contém informações tabela Certificado. Isso é armazenado em uma matriz de WIN_CERTIFICATE estruturas. Um Certificado é um digitalmente assinado declaração que contém informações sobre uma entidade e chave pública dessa entidade. Certificados não serão carregados na memória como parte de arquivo PE.
O seguinte exemplo de código mostra o formato de um WIN_CERTIFICATE estrutura que é necessário para suporte a PKCS1 padrão.
typedef struct {
// Standard WIN_CERTIFICATE fields (8 bytes)
DWORD dwLength;
WORD wRevision;
WORD wCertificateType; // = WIN_CERT_TYPE_PKCS1_SIGN
// WIN_CERT_TYPE_PKCS1_SIGN fields follow
DWORD cbSignedData;
// optional signed attributes
BYTE bSignedData[MAX_WIN_CERT_SIGN_DATA_LEN];
BYTE bSign[MAX_RSA_KEY_BITS/8]; // PKCS1 signature
} PKCS1_MODULE_SIGN ;
Signfile.exe acrescenta o WIN_CERTIFICATE estrutura para o fim do arquivo e atualiza a cabeçalho do arquivo de acordo. Para codificar Signfile.exe exemplo, consulte % _WINCEROOT%\Public\Common\Oak\Tools\Signfile.
See Also
Concepts
Trusted Environment Creation
Creating Digital Signatures