Cartão de Cidadão v1 e v2: o que mudou para quem desenvolve?

Avatar
Autor

Mudaram cinco coisas para quem desenvolve com o Cartão de Cidadão v2. As chaves passaram de RSA para ECDSA. [...]

Para operações em modo de contacto, actualizar o middleware é em geral suficiente, sem alteração significativa de integração. O contactless, esse, exige métodos novos do SDK. Tudo o que verifique assinaturas ou use os métodos criptográficos do SDK precisa de atenção por causa do ECDSA, e é aí que a maioria de quem desenvolve para o Cartão de Cidadão v2 perde tempo.

O novo Cartão de Cidadão é emitido desde junho de 2024, redesenhado para as normas de segurança e formato do Regulamento (UE) 2019/1157, que estava em aplicação desde 2 de agosto de 2021 e foi substituído pelo Regulamento (UE) 2025/1208 a 9 de julho de 2025. Os cartões antigos que continuam válidos mantêm-se a funcionar, por isso o seu código tem de lidar com ambos indefinidamente em vez de migrar de um para o outro.

Junho de 2024
Portugal começa a emitir o Cartão de Cidadão v2
3.12.0
Primeira versão do middleware com suporte ao novo cartão: interface contactless e ECDSA
3.13.0
Módulo de SDK para .NET 8/9, PteidToken actualizado no macOS, desempenho da assinatura contactless
3.14.0
Leitura de dados de viagem no novo cartão e noutros documentos ICAO Doc 9303
Se a sua integração é anterior a meados de 2024, o resultado provável não é uma falha total. É uma falha subtil em alguns cartões e não noutros.

Cartão de Cidadão v2 para quem desenvolve: o que mudou em relação ao v1?

Chaves
RSA passa a ECDSA
O v1 usa RSA. O v2 usa chaves e certificados de curva elíptica. A documentação oficial é explícita que isto tem de ser tido em conta em aplicações que usem os métodos criptográficos do SDK ou que verifiquem dados assinados pelo cartão.
Interface
Chega o contactless
O v2 suporta leitura sem contacto sobre ISO/IEC 14443. O modo de contacto funciona depois de actualizar o software, sem alteração significativa de integração. O contactless exige os métodos mais recentes do SDK.
Físico
Contactos passaram para o verso
No novo cartão os contactos do chip estão no reverso do documento. Isso explica uma parte dos casos de suporte que ninguém associa à versão do cartão.
Cadeia de confiança
CA intermédias podem faltar
Quando cartões v2 são usados com o módulo PKCS#11, as autoridades de certificação intermédias podem não ser devolvidas. Obtenha-as previamente da página oficial de PKI, ou no momento de uso através da extensão AIA.
Ambas as versões continuam em circulação, por isso quem desenvolve para o Cartão de Cidadão v2 continua também a suportar o v1. A actualização do middleware garante compatibilidade com o novo modelo e com modelos anteriores ainda válidos e em uso.

Porque é que o ECDSA quebra código que parecia agnóstico ao algoritmo?

Porque muito código não é tão agnóstico como se lê. Aparece em quatro sítios: um identificador de algoritmo escrito no código numa rotina de verificação de assinatura, redigido quando o RSA era a única opção; uma biblioteca de validação configurada com uma lista de algoritmos permitidos que ninguém revisitou; pressupostos de tamanho de chave em tratamento de buffers ou em definições de colunas de base de dados; e fixtures de teste que contêm apenas material assinado com RSA.

O quarto custa mais tempo, porque produz um build verde e um sistema a falhar. Se os seus dados de teste foram capturados antes de meados de 2024, não contêm nenhum cartão ECDSA.

O que é o CAN, e o que está o PACE a fazer?

Duas coisas diferentes, frequentemente confundidas. O Card Access Number é um código de seis dígitos impresso no canto inferior direito do novo cartão, e existe para prevenir leitura contactless não autorizada. Não é um PIN. É distinto dos PIN de autenticação, assinatura e morada, e não é secreto da mesma maneira: qualquer pessoa que segure o cartão consegue lê-lo. Prova posse física, não consentimento. Um detalhe de implementação: ao invocar C_Login através de PKCS#11 em modo contactless com um cartão v2, o CAN é passado como parâmetro de PIN, o que nada no nome do parâmetro sugere.

O PACE é o protocolo de autenticação que protege o uso contactless, descrito na parte 11 do Documento 9303 da ICAO. O controlo de acesso aos dados no chip contactless é feito através de PACE usando dados lidos da Zona de Leitura Automática do documento, ou opcionalmente, no caso dos cartões, através do CAN. A segurança é adicionalmente garantida por autenticação passiva dos datagrupos, e por autenticação do chip através de mecanismos de Active Authentication e Chip Authentication.

As três coisas que tem de construir para o v2
Captura do CAN
Seis dígitos do cartão, exigidos para contactless. Decida deliberadamente se o guarda em cache
Tratamento de PACE
Maquinaria de documento de viagem, não de eID nacional. Preveja tempo de aprendizagem se a equipa nunca trabalhou com passaportes electrónicos
Detecção de versão
Nenhuma API de PKCS#11 reporta tipo de cartão nem modo. Tente inicializar sem PIN nem CAN, repita com o CAN
Isto importa por uma razão prática: é maquinaria de documento de viagem. Se a sua equipa já trabalhou com passaportes electrónicos, é familiar. Se não, o tempo de aprendizagem nada tem a ver com o Cartão de Cidadão em si.

Um detalhe de experiência de utilizador que vale desenhar. A aplicação de desktop pede o CAN na primeira utilização contactless e não volta a pedir nas utilizações seguintes com o mesmo cartão, com opção de não o guardar. Se construir o seu próprio fluxo, decida deliberadamente se guarda o CAN em cache, porque o argumento da conveniência e o da segurança apontam em direcções opostas e a decisão pertence ao responsável de produto e não a quem escreve a caixa de diálogo.

Tem uma integração anterior ao novo cartão e ninguém sabe o que ela faz no v2?
Fale com a nossa equipa

O que muda na cadeia de certificação?

Esta é a alteração com maior probabilidade de chegar a produção sem ser detectada, porque depende da interface que o seu código usa. A construção da cadeia passa a ser responsabilidade sua em vez de algo que o módulo lhe entrega. Código que assumia que uma cadeia completa vem do token vai falhar a validação no v2 enquanto continua a funcionar no v1, que é exactamente o padrão que é diagnosticado como cartão avariado.

E se buscar as intermédias em tempo de execução através de AIA, introduziu uma dependência de rede num caminho de verificação. Decida se isso é aceitável, e se não for, pré-carregue e guarde em cache com um plano de actualização. A documentação da aplicação de desktop inclui uma secção de resolução de problemas com a nova cadeia de confiança, que é um sinal razoável de que isto não é uma preocupação teórica.

Qual é a lista de migração mais curta para o Cartão de Cidadão v2?

Actualize o middleware para 3.12.0 ou posterior, e registe contra que versão está certificado.
Procure no seu código pressupostos de RSA: identificadores de algoritmo, listas de algoritmos permitidos, constantes de tamanho de chave.
Acrescente material ECDSA às suas fixtures de teste. Sem isto, nada mais na lista é verificável.
Implemente e teste detecção explícita de versão, com registo. Quando um caso de suporte descreve que não funciona, a primeira pergunta útil é qual a versão do cartão e qual a interface, respondida a partir de registos e não perguntando ao utilizador.
Corrija a construção da cadeia para o caso em que as intermédias não são devolvidas, e decida entre pré-carregamento e busca por AIA.
Planeie contactless apenas se precisar. Os métodos novos do SDK, a captura do CAN na sua interface, e uma decisão sobre guardá-lo em cache. O modo de contacto sozinho não precisa de nada disto.

Existe um modo de testes, e importa mais do que parece. A documentação do SDK refere a configuração de um, junto à secção de acesso contactless. Os códigos PIN bloqueiam ao fim de três tentativas erradas, o desbloqueio exige uma ida presencial com a carta de PIN, e há developers a testar fluxos de assinatura contra cartões reais que os bloquearam. Encontre essa secção antes do seu primeiro teste de assinatura, não depois.

O sexto item é o único desenvolvimento genuinamente novo. Os primeiros cinco são uma manhã a ler o seu próprio código seguida de corrigir o que encontrar, e são o que separa uma integração que funciona em ambos os cartões de uma que funciona nos cartões que o seu developer por acaso tem. Se está a começar de zero em vez de migrar, o nosso guia sobre integrar o Cartão de Cidadão em aplicações privadas cobre o terreno anterior a este.

Leitura relacionada

Integrar o Cartão de Cidadão em aplicações privadas O artigo de origem. Qual dos três caminhos de integração serve, e quanto lhe custa a camada do leitor.
Que sectores têm de aceitar a EUDI Wallet até 2027? A obrigação que chega ao lado do cartão, e as duas condições que decidem se se aplica a si.
Guia de implementação do eIDAS 2.0 Escrito na perspectiva de uma equipa que mantém middleware de identidade electrónica nacional desde 2011.
Como Cabo Verde construiu identidade digital para um arquipélago Middleware de eID desenhado para funcionamento offline e activação remota.
eID Box O produto de middleware construído sobre este trabalho.

Perguntas frequentes

Cartão de Cidadão v2 para quem desenvolve: o que mudou

O que mudou entre o Cartão de Cidadão v1 e v2?
O cartão v2, emitido desde junho de 2024, usa chaves e certificados ECDSA em vez de RSA, suporta leitura sem contacto sobre ISO/IEC 14443 protegida pelo protocolo PACE, introduz um código CAN de seis dígitos para acesso contactless, e tem os contactos do chip no verso do documento. O suporte no middleware começa na versão 3.12.0. As alterações estão documentadas no repositório do projecto e nos manuais oficiais.
Código escrito para o Cartão de Cidadão antigo continua a funcionar?
Para operações em modo de contacto, actualizar o software é em geral suficiente sem alteração significativa de integração. O contactless exige métodos novos do SDK. Código que verifica assinaturas ou usa os métodos criptográficos do SDK precisa de ser revisto porque o novo cartão usa ECDSA, e as CA intermédias podem não ser devolvidas através de PKCS#11 no v2.

CAN e detecção de versão

O que é o CAN no Cartão de Cidadão?
O Card Access Number é um código de seis dígitos impresso no canto inferior direito do novo Cartão de Cidadão. É exigido para leitura sem contacto e é distinto dos PIN de autenticação, assinatura e morada. Ao usar C_Login através de PKCS#11 em modo contactless, o CAN é passado como parâmetro de PIN.
Como se sabe se um cartão é v1 ou v2?
Tem de implementar isso. Actualmente não existe API de PKCS#11 dedicada para verificar o tipo de cartão nem se o modo contactless está em uso, pelo que os developers têm de implementar a sua própria estratégia. Uma abordagem documentada é tentar a inicialização sem PIN nem CAN, e repetir com o CAN se isso falhar.

Certificados e testes

Porque é que a validação de certificados falha no cartão novo e não no antigo?
Porque as autoridades de certificação intermédias podem não ser devolvidas quando cartões v2 são usados com o módulo PKCS#11. Obtenha-as previamente da página oficial de PKI, ou no momento de uso através da extensão Authority Information Access presente em cada certificado. Código que assumia uma cadeia completa a partir do token vai falhar apenas no v2.
Pode testar fluxos de assinatura sem bloquear cartões reais?
A documentação do SDK descreve a configuração de um modo de testes, e vale encontrá-lo antes do primeiro teste de assinatura. Os códigos PIN bloqueiam ao fim de três tentativas erradas, e o desbloqueio exige uma ida presencial a um balcão do IRN com o cartão e a carta de PIN.
Caixa Mágica Software
Equipa Caixa Mágica
A Caixa Mágica Software é uma empresa portuguesa de software com mais de 20 anos de experiência a entregar software à medida, soluções de IA e equipas de desenvolvimento nearshore para organizações europeias. Trabalhamos em middleware de identidade electrónica nacional há mais de uma década.
eID Box · Caixa Mágica Software
Está a migrar uma integração anterior ao novo cartão?
Envie-nos a versão do middleware em que está e onde verifica assinaturas. Trabalhamos em middleware de identidade electrónica nacional há mais de uma década, por isso essa conversa é curta.