Gravando o Bootloader

Eu estava tendo problemas com o upload do meu Arduino, onde o erro era “avrdude: stk500_getsync(): not in sync: resp=0x00”. Procurando pela internet, achei diversos sites que me orientavam a verificar as configurações da porta serial, ou ainda se o modelo do Arduino escolhido como target correspondia ao meu hardware. Foi muito frustrante porque nada funcionava e o bendito stk500 continuava a acontecer. Deixei esse arduino de lado e começei a trabalhar com outros que eu tinha disponível.

Após um tempo, trabalhando num projeto onde eu iria integrar o arduino na placa do meu projeto principal, eu tive a ideia de aproveitar o AtMega328 da placa que não funcionava. Para a minha surpresa, quando eu fui fazer o upload do firmware para a microcontroladora, o mesmo stk500 estava de volta. Foi então que eu me toquei que o problema não estava no hardware da placa, mas no IC da microcontroladora.

Depois de algumas tentativas, achei o problema: o bootloader da microcontroladora estava defeituoso. Fiz uma nova gravação do bootloader, e o problema com stk500 desapareceu de vez. Recoloquei o IC na placa, e voilà, problema resolvido.

Então, abaixo vai uma descrição sucinta de como regravar o bootloader de uma microcontroladora, caso necessário. Vale atentar para o hardware que eu tinha disponível, um Arduino Uno que utiliza a microcontroladora AtMega328p. Se você usa uma outra placa, deve então prestar atenção para fazer as adaptações correspondentes ao seu hadrware na sua configuração.

O que você precisará:

  • uma placa Arduino em funcionamento;
  • o IC no qual você deseja gravar o bootloader;
  • 1 cristal 16Mhz;
  • 2 capacitores 22pF;
  • 1 resistor 10K Ohms;
  • 1 breadboard;
  • diversos jumpers.

 

O que você fará:

a) Faça upload do sketch ‘ArduinoISP’ (que se encontra no menu ‘File-> Examples -> 11.ArduinoISP’);

b) Faça as conexões entre a sua placa Arduino e a microcontroladora na breadboard, conforme o schematic (no schematic, os labels D10, etc, se referem às portas digitais do Arduino que está atuando como gravador);

c) Selecione ‘Arduino/Genuino Uno’ no menu ‘Tools -> Board’;

d) Selecione ‘Arduino as ISP’no menu ‘Tools -> Board’;

e) Execute o comando ‘Tools -> Burn Bootloader’.

 

Pronto! Sua microcontroladora está com o bootloader gravado,  pronta para ser instalada na sua placa e utilizada em seus projetos!

Arduino as ISP

 

 

 

 

Arduino – Projeto de Sonda Meteorológica – Parte II

Near Space

Essa é a região da estratosfera, a camada atmosférica que fica acima daquela em que vivemos, a troposfera, e se estende entre 10 milhas e 30 milhas de altitude, o que corresponde a aproximadamente entre 16km e 48km. A altitude atingida pelos balões atmosféricos varia em função da sua gramatura, sendo que os balões detentores de recordes de altitude são aqueles que chegam em torno de 120.000 pés (algo em torno de 40km).

Esta camada apresenta o desafio de ter uma grande variação térmica grande, entre -50C e +10C, além de a pressão atmosférica diminuir cada vez mais, em função da altitude. A sonda deve estar preparada para fazer face às temperaturas extremas, e continuar o seu trabalho de registro das informações, bem como garantir o funcionamento do Arduino e dos sensores. Rotinas de reinicialização devem estar previstas para lidar com eventuais panes do sistema ocasionadas pelas condições extremas.

O que queremos registrar?

Em uma missão de vôo de um HAB, estamos interessados em registrar as variáveis ambientais, de localização e posicionamento, bem como a variação de cada uma destas variáveis nas diferentes altitudes e camadas atmosféricas. A coleta de dados em série, permitirá o estudo e a compreensão das diversas variáveis, bem como a correlação entre elas.

As variáveis de interesse para a sonda estão listadas abaixo, com seus respectivos parâmetros:

Temperatura interna (tint) – temperatura observada no interior da cápsula da sonda; min: -70C; max: +100C.
Temperatura externa (text) – temperatura observada no exterior da cápsula da sonda; min: -70C; max: +100C.
Umidade relativa do ar (urel) – min: 0%; max: 100%.
Pressão atmosférica (patm) – Pressão atmosférica, inversamente proporcional à altitude; min: 0; max: 110000 (ao nível do mar).
Altitude (alt) – altitude corrente da sonda; min: 0m; max:50000m.
Partículas de poluição no ar (ppm) – ou partes por milhão, mede a dispersão de poeira no ar; min: 0; max: 10.000.000.
Luminosidade (lux) – luminosidade no espectro visível aos humanos; min: 0.1; max: 40000.
Luz infra-vermelho (lIR) – luminosidade infra-vermelho.
Luz ultra-violeta (lUV) – luminosidade ultra-violeta.
Concentração de ozônio (o3) – mede a concentração do gás ozônio.

Todos os circuitos e sensores devem ser capazes de se manter funcionando em temperaturas extremamente baixas, impostas pelo ambiente inóspito do “Near Space”. Uma camada de isolamento térmico será provida aos circuitos mais sensíveis ao frio, e cujo funcionamento não seja afetado por esse isolamento.

Que hardware queremos utilizar na sonda?

O hardware utilizado para a construção da sonda pode ser dividido em duas categorias: o hardware de sensoriamento e o hardware de apoio.

O hardware de sensoriamento é essencial ao processo de medição das variáveis de interesse. Se trata portanto, de todos os sensores que direta ou indiretamente participam da medição ou do cálculo para a derivação de valores para as variáveis. Segue uma listagem do hardware mínimo para o atendimento dos objetivos da sonda:

• sensor de temperatura;
• sensor de pressão;
• sensor de umidade;
• sensor de luminosidade (lux);
• sensor de espectro IR (infra-vermelho);
• sensor de espectro UV (ultra-violeta);
• microfone;
• acelerômetro;
• giroscópio;
• magnetômetro;
• GPS;
• contador Geiger (se possível embarcar no balão).

O hardware de apoio é todo aquele necessário ao funcionamento da sonda meteorológica, mas que não está relacionado diretamente ao processo de sensoriamento. Dos hardwares pertencente a esta categoria, podemos citar (lista não exaustiva):

• Arduino Uno;
• gravador de áudio;
• módulo Bluetooth;
• módulo Wifi;
• SD-Card;
• bateria Li-Po;
• display OLED;
• Trackball vibratório.

O que mais queremos incluir na sonda?

Existem diversas outras características que gostaríamos de implementar na sonda meteorológica, que são complementares às funcionalidades principais, mas que ajudam a dar a usabilidade que a sonda necessita para ser utilizada pelo público.

Interface por linha de comando, via comunicação serial – implementaremos a interface de usuário em linha de comando serial, para possibilitar ao usuário a parametrização da sonda. Disponibilizaremos uma lista de comandos e seus parâmetros, bem como uma ajuda de contexto para o usuário.

Relógio de tempo real integrado – um relógio de tempo real permitirá à sonda registrar a hora correta, com precisão de milissegundos, para fazer o timestamping de todas as linhas de dados. Com isso, garantimos o registro do momento do sensoriamento com precisão, conferindo a confiabilidade necessária aos dados colhidos. O RTC tem como vantagem adicional a manutenção da contagem da data/hora, independentemente de o circuito estar ligado a uma fonte de alimentação, graças ao seu esquema de backup de alimentação por bateria moeda.

Monitoramento do nível da bateria – o nível de carga da bateria será monitorado por um processo de software. Uma vez que esse nível chegue perto da condição de brown-out (onde a bateria já não consegue mais fornecer energia o suficiente no nível lógico do circuito, causando erros de funcionamento, pois o circuito não distingue mais um ‘estado alto’ de um ‘estado baixo’).

Arduino – Projeto Sonda Meteorológica – Parte I

Apresentação

Este projeto se trata de uma sonda meteorológica para ser embarcada em um balão e chegar à atmosfera. O objetivo da sonda é registrar diversas variáveis continuamente ao longo do vôo do balão, para verificar qual o comportamento destas variáveis em função da altitude, assim como a eventual correlação entre cada uma delas.

O projeto é dividido em diversas fases. Os principais milestones dele são: a) projeto do hardware; b) projeto do firmware; c) projeto do software pós missão; d) apresentação dos resultados obtidos, e próximos passos.

A fase “projeto de hardware” lidará com as definições de quais equipamentos utilizar, escolher a plataforma da microcontroladora, os sensores utilizados, e os periféricos de apoio (memória EEPROM, cartão SD, etc). Nesta fase também será projetado o circuito impresso que servirá de base para a integração de todos os equipamentos e a sua comunicação com a microcontroladora. Fatores que determinarão o sucesso da fase serão a escolha dos equipamentos em termos de custo, peso, e de tolerância às condições apresentadas na estratosfera, criação do layout da PCB em tamanho compacto e com o desempenho correto das funções de sensoriamento e registro das atividades.

A fase “projeto do firmware” deverá lidar com as especificidades de cada equipamento de hardware, escrever o código para seu correto funcionamento, e integrar toda a funcionalidade no espaço restrito de memória oferecido pelo Arduino (em geral, 32kb de ROM). Outra preocupação nesta fase será escrever uma interface de usuário mínima, para que o usuário possa configurar e verificar diretamente na placa as informações e parâmetros de funcionamento do módulo.

O “projeto de software pós-missão” é opcional, mas permite a análise dos dados colhidos na missão de maneira personalizada, permitindo a partir dos registros do módulo realizar cálculos, gerar gráficos, fazer a correlação das variáveis, enfim, toda a análise que transformará os dados em informação prontamente disponível à comunidade. Aqui, como prova de conceito, temos a ideia de utilizar o OpenCOBOL como linguagem para manipulação dos arquivos, processamento dos dados, e a realização dos cálculos estatísticos. Para a geração dos gráficos, utilizaremos a API do GnuPlot.

Finalmente, na fase “apresentação dos resultados obtidos e próximos passos” irá lidar com as informações geradas na fase de análise dos dados e formatar documentos para disponibilização da comunidade, como relatórios no formato PDF, as imagens geradas a partir do GnuPlot. Em termos de próximos passos, vamos verificar a ocorrência de algum erro ou inconformidade na missão, e discutir as suas soluções. Vamos também discutir sobre o projeto de uma nova placa PCB, desta vez incluindo o circuito do Arduino, para eliminar a necessidade de embarcar uma placa da nossa famosa microcontroladora num balão a cada viagem.

Bem, é isso, espero que vocês acompanhem a cada quarta-feira a seqüência de cada uma das fases deste projeto.

Arduino – Escrevendo seu primeiro programa

Agora você deve estar pronto para escrever seu primeiro programa para o Arduino. O primeiro programa que você escreverá, como de costume, será o “Hello World“. Ele enviará o texto para o Serial Monitor. Vamos olhar o programa:

void setup(){
//ativa a comunicação serial, e estabelece a velocidade de comunicação (9600 baud); 
    Serial.begin(9600); 
}
void loop(){
    //envia "Hello World" para a porta serial. 
    Serial.println("Hello World"); 
    // atribui um pequeno delay para repetir a operação (100 milissegundos)
    delay(100); 
}

O que este programa está fazendo? Permita-me explicar. Primeiro nós digitamos um método chamado setup(). Esta é uma estrutura obrigatória no seu programa, mesmo que você não coloque nada entre suas chaves.

Neste programa, nós temos algum conteúdo entre as chaves.

Você perceberá a função Serial.begin(); esta função configura a comunicação serial e a inicializa; dentro dos parênteses nós colocamos o valor da velocidade da transmissão de dados desejada; este valor pode ser qualquer um entre 300 e 115200 e pode variar de programa a programa, dependendo do tipo de dado que você está enviando, e o quão rápido que você quer enviá-lo.

Depois da estrutura do setup(), nós digitamos uma outra estrutura obrigatória, chamada de loop(), que é onde a maior parte do tempo o seu microcontrolador gastará o tempo. A estrutura loop() irá executar as instruções entre as chaves repetidamente.

Neste programa você verá que o programa utiliza a função Serial.println(); esta função é usada para escrever informação na porta serial, além de uma quebra de linha.

O próximo trecho de código no método loop() simplesmente coloca um pequeno delay no programa, de modo que “Hello World” não é mostrado um milhão de vezes por hora.

void loop(){
    //escreve Hello World na porta serial 
    Serial.println("Hello World"); 
    delay(100); 
}

Agora, digite os dois métodos na IDE do Arduino, se ainda não o tiver feito. Após completar o programa, verifique se o Arduino está conectado ao seu computador.

1) Agora, se tudo estiver em ordem, pressione o botão Verify;

2) Nenhum erro deve aparecer, e se assim for, pressione o botão Upload. O seu programa começará a ser transferido para a sua placa;

3) Agora pressione o botão Serial Monitor e você deve ver a frase “Hello World” sendo mostrada repetidamente no monitor serial;

OK, é só isso nesta lição. Espero que você tenha apreciado esta primeira lição de uma série de lições. Se você tiver alguma pergunta, sinta-se à vontade de enviar um comentário no post.

Arduino – Configurando a IDE

Agora que temos a IDE e o software do driver instalados, podemos falar sobre a IDE do Arduino com mais detalhes. A IDE do Arduino é onde você irá escrever, debugar, e transferir deus programas para a placa do Arduino.

A primeira coisa que você verá será uma área em branco; nesta área você digitará seus programas. Agora olhe na parte direita superior da área branca, e você verá alguns botões, que são (da esquerda para direita): Verify, Upload, New, Open e Save. Você usará dois deles neste exercício: 

  • O botão Verify, que garante que seu programa não possui erros de sintaxe; no entanto, ele não checa erros de lógica (falaremos sobre erros de lógica em um artigo adiante); 
  • O próximo botão que você usará será o botão Update; este botão envia o programa para a sua placa do Arduino; ele também verifica se o programa tem erros de sintaxe. 

Existe um outro botão que é muito importante, especialmente para esta lição, que é o Serial Monitor, e está localizado no canto superior direito da IDE (não clique nele ainda, porque não configuramos o modelo da placa e a porta serial). O Serial Monitor permitirá que você envie e receba informações da sua placa do Arduino. Usos comuns para o Serial Monitor são: debug, enviar informações de variáveis para a placa do Arduino, etc… 

Agora vamos explicar como selecionar sua placa e sua porta serial: 

1) Abra a IDE do Arduino (se já não estiver aberta); 

2) Vá em Tools -> Board e selecione a placa equivalente ao seu modelo de Arduino; 

3) Volte para Tools -> Serial Port, e selecione a porta COM à qual seu Arduino esteja conectado. 

 

 

 

Arduino – Noções Básicas

INDICE
1. O que é Arduino?
2. Entradas e Saídas do Arduino
3. Instalando a IDE do Arduino
4. Instalando os Drivers de dispositivo
5. Trabalhando com a IDE do Arduino
6. Escrevendo seu primeiro programa no Arduino

1. O que é Arduino?

Arduino é a plataforma de microcontroladores mais popular do mundo. O que é um microcontrolador? Bem, um microcontrolador é um pequeno computador que contém um processador, alguma memória e todas as suas Entradas e Saídas.

O que você pode fazer com o Arduino? Na verdade, você pode fazer qualquer coisa, desde piscar um LED até construir um controlador para um satélite, portanto com o Arduino nem o céu é o limite. O Arduino tem muitos tipos diferente de Entradas e Saídas, e eu gostaria de cobri-las com um pouco mais de detalhes.

2. Entradas e Saídas do Arduino

A figura 1 mostra todas as Entradas e Saídas da placa compatível com o Arduino Leonardo. Eu quero explicar estas E/S (entradas/saídas) com um pouco mais de detalhes.

Entrada/Saída Digital: O Arduino Leonardo e as placas compatíveis possuem 20 entradas e saídas deste tipo. O lado de entrada de um sinal digital ler· um sinal de +5V ou 0V, e nenhum outro valor neste intervalo, para por exemplo, ler o valor de um botão. O lado de saída do sinal digital enviar· um sinal de +5v ou 0V, para por exemplo, ligar um LED (+5V) ou desligá-lo (0V). Veja a figura 2.

Fig. 2 (Ref: http://www.jeremyblum.com/2010/09/05/driving-5-speakers-simultaneously-with-an-arduino/)

Entrada analógica: se você quiser medir a voltagem de uma pilha AA você pode usar uma entrada analógica. Ela converte o nível da voltagem em um valor digital que a placa compatível com Arduino pode processar.

Modulação de largura de pulso (PWM – Pulse Width Modulation): Imagine que você esteja ligando e desligando uma luz em uma frequencia muito alta; se você pudesse fazê-lo, poderia controlar o quão brilhante ou tênue a luz brilha, aumentando o tempo em que ela fica ligada (para deixá-la mais brilhante) ou aumentando o tempo em que ela está desligada (para deixá-la mais tênue); isto é exatamente o que os sinais PWM fazem. Veja a Fig. 3.

Fig. 3 (Ref:http://arduino.cc/en/tutorial/SecretsOfArduinoPWM)

Circuito Inter-Integrado (I2C – Inter-Integrated Circuit): Este tipo de sinal o permite controlar múltiplos dispositivos sem usar entradas e saídas extras. O I2C tem um sistema de dois canais SDA e SCL. O SDA é o canal por onde o dado é transmitido, e SCL é o clock que controla a velocidade na qual os dados são transmitidos.

Interface Serial de Periféricos (SPI – Serial Peripheral Interface): Este tipo de porta também permite conexão a múltiplos dispositivos, de modo que se possa economizar entradas e saídas. Porém, este sinal necessita de um pino para a seleção de chip (CS Pin). O SPI geralmente necessita de 4 canais: MOSI, MISO, SCK E CS. O SPI pode lidar com volumes de dados consideravelmente maiores que o I2C.

Universal Assynchronous Receiver/Transmitter (UART): Este tipo de porta permitirá o envio e recebimento de dados de sua placa compatível com Arduino. Tipicamente uma porta UART tem um TX (transmissão) e um  RX (recepção).

Não se espera que você seja um expert em cada um destas portas / sinais; só queria assegurar que você tivesse uma noção de que tipos de sinal nós examinaremos no futuro. Portanto, agora que você sabe o que é um Arduino, e o que o Arduino pode oferecer, nós podemos prosseguir para como usá-lo.

A primeira coisa que precisamos fazer é instalar a IDE do Arduino no computador. Mas o que é a IDE (Integrated Development Environment) do Arduino? É o editor integrado no qual você escreverá seus programas (ou Sketch) e os transferirá para sua placa compatível com Arduino. Nós examinaremos a IDE do Arduino posteriormente nesta lição. Agora vamos explicar como instalar a IDE no seu computador (no sistema operacional Windows).

3. Instalando a IDE do Arduino

1) Vá para http://arduino.cc/en/Main/Software e clique sobre “Windows (ZIP File)”. O download começará;
2) Agora dê um duplo-clique no arquivo baixado para descompactá-lo;
3) Arraste e solte a pasta arduino-1.0.5 para seu desktop;
4) Para abrir a IDE do Arduino, dê um duplo-clique na pasta arduino-1.0.5 e uma nova janela se abrirá;
5) Agora clique no ícone do Arduino e a splash screen será exibida, abrindo a IDE em seguida.

Estes são os passos necessários para baixar e instalar a IDE do Arduino.

Agora que a IDE está instalada, precisamos instalar os drivers de dispositivo para a placa compatível com Arduino.

1) Conecte sua placa compatível com Arduino ao computador utilizando um cabo micro USB;
2) Vá ao Gerenciador de Dispositivos, no Painel de Controle;
3) Quando o Gerenciador de Dispositivos abrir, você verá uma categoria chamada “Outros Dispositivos” e sob ela você verá “Arduino Leonardo” com uma exclamação amarela ao seu lado;

Política de Assinatura AD-RB

Dando continuidade ao assunto de políticas de assinatura, neste post examinaremos a política de assinatura mais simples da ICP-Brasil – e por isso mesmo, a mais amplamente adotada pelas instituições e entidades usuárias de assinatura digital.

A política AD-RB em CAdES é oficialmente conhecida como ‘Política ICP-Brasil para Assinatura Digital com Referência Básica no formato CMS’. No momento da redação deste post, a última versão disponível para esta política era a versão 2.1.

Ela é definida no documento normativo DOC-ICP-15.03, seção 2 e anexos 1 e 2.

Segundo do DOC-ICP-15.03, o objetivo da AD-RB é ser usada em “aplicações ou processos de negócio, assinatura digital, segurança, a autenticação de entidades, verificação de integridade e validação durante o prazo de validade dos certificados signatários”.

No campo aplicação da política de assinatura está declarado: “Este tipo de assinatura deve ser utilizado em aplicações ou em processos de negócio nos quais a assinatura digital agrega segurança à autenticação de entidades e verificação de integridade, permitindo sua validação durante o prazo de validade dos certificados dos signatários. Uma vez que não são usados carimbos de tempo, a validação posterior só será possível se existirem referências temporais que identifiquem o momento em que ocorreu a assinatura digital. Nestas situações, deve existir legislação específica ou um acordo prévio entre as partes definindo as referências a serem utilizadas. Segundo esta PA, é permitido o emprego de múltiplas assinaturas”.

Referências temporais

Como na política AD-RB não são utilizados carimbos de tempo, é necessário incluir referências temporais no momento da geração da assinatura para futura validação. A política não especifica explicitamente qual referência utilizar, o que abre a possibilidade de incluir os campos que forem mais adequados aos processos de negócio específicos. No entanto, a política determina que para a inclusão destes referenciais, deve existir legislação específica ou acordo prévio entre as entidades que são interessadas nesta assinatura, para efeitos de estabelecimento de um protocolo comum para validação no futuro.

Versões

As versões de políticas têm o objetivo de permitir a evolução das regras que se aplicam às políticas com o passar do tempo, não afetando os documentos que foram criados sob a vigência de regras anteriores. Assim, cada política tem sua data de emissão e o período no qual as assinaturas geradas podem se utilizar de suas regras.


(vrs -        OID          - emissão    - expiração)

v1.0 - 2.6.76.1.7.1.1.1    - 31/10/2008 - 31/12/2014
v1.1 - 2.16.76.1.7.1.1.1.1 - 26/12/2011 - 29/02/2012
v2.0 - 2.16.76.1.7.1.1.2   - 26/12/2011 - 21/06/2023 (revogada)
v2.1 - 2.16.76.1.7.1.1.2.1 - 06/03/2012 - 21/06/2012

É interessante notar que para novas assinaturas, no momento da redação deste post, só é possível utilizar a versão da política de assinatura 2.1, pois as versões 1.0 e 1.1 já encontravam-se vencidas e a versão 2.0 foi revogada pela IN 03, 22 de março de 2012. No entanto, uma assinatura gerada na data hipotética de 08/11/2011 utilizando a versão 1.1 é perfeitamente válida, pois esta versão estava em plena validade quando da geração da assinatura digital.

As diferenças entre as quatro versões da política de assinatura AD-RB referem-se, majoritariamente, quanto aos algoritmos e tamanhos mínimos de chaves admitidos por cada versão.

As versões 1.0 e 1.1 exigem chaves de no mínimo 1024 bits, enquanto que as versões 2.0 e 2.1 exigem ao menos 2048 bits. Outra diferença é quanto aos algoritmos de hash e de assinatura digital. As versões 2.0 e 2.1 exigem o algoritmo sha256withRSAEncryption (1.2.840.113549.1.1.11), enquanto a versão 1.1 admite tanto o algoritmo sha256withRSAEncryption quanto sha1withRSAEncryption (1.2.840.113549.1.1.5), e a versão 1.0 admite exclusivamente o algoritmo sha1withRSAEncryption. Outra importante diferença diz respeito ao atributo assinado signingCertificate. Para as versões 1.0, 1.1 e 2.0 deve se usar o atributo id-aa-signingCertificate (1.2.840.113549.1.9.16.2.12); a partir da versão 2.1, inclusive, deve ser utilizado o atributo id-aa-signingCertificateV2 (1.2.840.113549.1.9.16.2.47).

Artefatos de Assinatura Digital da Política AD-RB.

O site do ITI mantém um repositório com os artefatos de assinatura digital que são relevantes para a política de assinatura AD-RB. Para cada versão da política, existe um artefato DER (política baseada em CAdES), um XML (política baseada em XAdES) e seus respectivos hashes para verificação de integridade.

v 1.0 - b921016bd03a721c61010beaec5341a00406a5cbc2f3800589b9cb1d727df06a PA_AD_RB.der
v 1.1 - af69b65b3090ec21baaf21ffb42c6ace9c9dbeb1443cffe8dc322c0bf5cdf0b9 PA_AD_RB_v1_1.der
v 2.0 - ac51fe96ecf0a7a5ac7e21a18be305c0180c6e8bb15ac5a66fb88137693a8983 PA_AD_RB_v2_0.der
v 2.1 - 3259f8a99b35393afadfa681fc381cd1eb6925c68718a8e92f7a658f253d3ba5 PA_AD_RB_V2_1.der

Um fato que causa confusão e que é importante de ser observado é que o DOC-ICP-15.03, no Anexo 1, nota 2, determina que “O hash da política de assinatura no atributo id-aa-ets-sigPolicyId da assinatura deve ser o hash interno que está na própria PA e não o hash da PA que se encontra publicada na LPA”. Com isso, a ICP-Brasil quer dizer que ao gerar um envelope, o campo de message digest que deve ser incluído no atributo id-aa-ets-sigPolicyId deve ser lido de dentro da estrutura da PA, e não calculado sobre o conteúdo total do arquivo. Para efeito de comparação, abaixo colocamos os hashes que devem ser usados na codificação de envelopes AD-RB, que são diferentes dos hashes de verificação mostrados anteriormente.

v 1.0 - 20D6789325513BBC8C29624E1F40B61813EC5CE7 (sha1)
v 1.1 - 397E6EA850C78AC44E7F3872DB369EDFECB50E63 (sha1)
v 2.0 - 5311E6CE55665C87F6085EF11C82FA3FB1341CADE7981ED9F51D3E56DE5F6AAD (sha256)
v 2.1 - DD57C98A4313BC1398CE6543D3802458957CF716AE3294EC4D8C26251291E6C1 (sha256)

Além disso, a política admite as formas de assinatura attached (documento anexado, ou interno) e dettached (documento associado, ou externo). Na forma attached, o conteúdo do documento que foi assinado está anexado ao envelope digital, enquanto que na forma dettached o documento é associado de forma lógica, por meio da assinatura do seu hash nos atributos assinados.

Referências

DOC-ICP-15 – Visão Geral sobre Assinaturas Digitais na ICP-Brasil
DOC-ICP-15.01 – Requisitos Mínimos para a Geração e Verificação de Assinaturas Digitais na ICP-Brasil – v2.
DOC-ICP-15.03 – Requisitos das Políticas de Assinatura na ICP-Brasil – v6.1.
Artefatos de assinatura digital – http://www.iti.gov.br/index.php/component/content/article/144-icp-brasil/repositorio/3974-artefatos-de-assinatura-digital
RFC3447 – Public-Key Cryptography Standards #1 – RSA Cryptography Specifications version 2.1 http://www.ieft.org/rfc/rfc3447.txt
RFC3370 e RFC3852 – Cryptographic Message Syntax (CMS) http://www.ieft.org/rfc/rfc3370.txt
http://www.ieft.org/rfc/rfc3852.txt
RFC5126 – CMS Advanced Eletronic Signatures (CAdES) http://www.ieft.org/rfc/rfc5126.txt

OIDs

sha1 - 1.3.14.3.2.26
sha256 - 2.16.840.1.101.3.4.2.1
sha512 - 2.16.840.1.101.3.4.2.3
sha1withRSAEncryption - 1.2.840.113549.1.1.5
sha256withRSAEncryption - 1.2.840.113549.1.1.11

id-aa-signingCertificate – 1.2.840.113549.1.9.16.2.12
id-aa-signingCertificateV2 – 1.2.840.113549.1.9.16.2.47

Raiz Políticas 2.16.76.1.7.1.1
AB-RB v1.0 – 2.16.76.1.7.1.1.1
AD-RB v1.1 – 2.16.76.1.7.1.1.1.1
AD-RB v2.0 – 2.16.76.1.7.1.1.2
AD-RB v2.1 – 2.16.76.1.7.1.1.2.1