Segurança do dispositivo

A segurança é uma preocupação essencial ao implantar e gerenciar dispositivos de Internet das Coisas (IoT). O Cloud IoT Core oferece os seguintes recursos de segurança:

  • Autenticação de chave pública/privada por dispositivo usando JSON Web Tokens (JWTs, RFC 7519).
    • Isso limita a área de superfície de um ataque, porque uma chave comprometida afetaria apenas um dispositivo, e não toda a frota.
    • Os JWTs são válidos por um período limitado. Portanto, as chaves comprometidas expiram.
  • Compatibilidade com algoritmos RSA ou de curva elíptica para verificar assinaturas, com aplicação para chaves com tamanhos fortes.
  • Compatibilidade com a rotação de chaves por dispositivo, permitindo o registro de chaves simultâneas, e a compatibilidade com o prazo de validade por credencial.
  • Conexão TLS 1.2, com autoridades de certificação raiz (obrigatórias para MQTT)
  • O acesso à API Cloud IoT Core é controlado pelos papéis e permissões do gerenciamento de identidade e acesso (IAM).

Credenciais de provisionamento

O diagrama a seguir resume o processo de provisionamento de credenciais do dispositivo. O "provisionador" autenticado, que geralmente é o usuário que configura o dispositivo, considera que ele criou um projeto e um registro e tem permissões para criar dispositivos. O provisionador usa a API Cloud IoT Core, os comandos gcloud ou o Console do Cloud Platform para criar um dispositivo lógico na nuvem.

Fluxo de provisionamento

  1. O par de chaves pública/privada é gerado pelo provisionador.
  2. O provisionador cria o dispositivo usando a API Cloud IoT Core, os comandos gcloud ou o Console do Cloud Platform, especificando a chave pública recém-criada. Isso será usado para verificar a identidade do dispositivo.
  3. O gerenciador do dispositivo Cloud IoT Core armazena o recurso do dispositivo e a chave pública.
  4. O gerenciador de dispositivos responde ao provisionador, indicando que ele foi criado.
  5. A chave privada é armazenada no dispositivo para ser usada posteriormente para autenticação. O Módulo de plataforma confiável (TPM, na sigla em inglês) do hardware pode ser usado nesta etapa.

A ordem das etapas mostrada aqui não é prescritiva. Por exemplo, a chave pode ser armazenada no dispositivo antes que ele seja registrado no Cloud IoT Core.

Para mais informações sobre como criar chaves, consulte Como criar pares de chaves.

Authentication

O diagrama a seguir resume a autenticação no Cloud IoT Core usando o MQTT:

Fluxo de autenticação

  1. O dispositivo prepara um JSON Web Token (JWT), conforme descrito em Como usar tokens JSON da Web. O JWT é assinado com a chave privada do fluxo de autenticação.
  2. Ao se conectar à ponte MQTT, o dispositivo apresenta o JWT como a senha da mensagem CONNECT MQTT. o conteúdo do nome de usuário é ignorado; No entanto, algumas bibliotecas de cliente do MQTT não enviarão a senha, a menos que o nome de usuário seja especificado. Para melhores resultados, defina o nome de usuário como um valor arbitrário como unused ou ignored.
  3. A ponte MQTT verifica o JWT em relação à chave pública do dispositivo.
  4. A ponte MQTT aceita a conexão.
  5. A conexão é fechada quando o JWT expira, porque após o deslocamento do relógio permitido.

Padrões de segurança

O Cloud IoT Core usa a autenticação digital baseada em assinatura para tokens assinados RSA e de curva elíptica. Os seguintes algoritmos específicos são compatíveis:

  • JWT RS256 (RSASSA-PKCS1-v1_5 usando SHA-256 RFC 7518 sec 3.3)
  • JWT ES256 (ECDSA usando P-256 e SHA-256 RFC 7518 sec 3.4), definido no OpenSSL como a curva prime256v1.

O algoritmo RSA é comumente usado e amplamente compatível com as bibliotecas de cliente. No entanto, as assinaturas e chaves geradas podem ser bem grandes (geralmente na ordem de um a dois kilobytes). Além disso, o RSA pode usar uma quantidade significativa de recursos (em termos de tamanho de chaves e CPU) que podem afetar dispositivos com recursos limitados.

O algoritmo da curva elíptica é bem aceito, mas não é tão amplamente usado quanto o RSA. Para usar a curva elíptica, pode ser necessário instalar dependências adicionais na biblioteca de cliente. No entanto, as chaves e assinaturas geradas são significativamente menores que as geradas pelo RSA, o que pode ser útil para dispositivos com recursos limitados.

Força da chave

Um mínimo de 112 bits de segurança é exigido pelo Cloud IoT Core, de acordo com as recomendações do NIST (seção 5.6.2, páginas 55 a 56). Isso se traduz em um tamanho mínimo de chave de 2.048 bits para RS256 (consulte a Tabela 2 nas recomendações do NIST, página 53).

O ES256 tem um nível predefinido de 128 bits de segurança (o tamanho da chave é fixo).

Formato da chave pública

Ao registrar a chave pública de um dispositivo, a chave precisa estar em um dos seguintes formatos:

Formatar Descrição
RSA_PEM Uma chave pública RSA codificada em base64. Pode ser usado para verificar assinaturas RS256 em tokens JWT (RFC 7518).
RSA_X509_PEM Uma chave RSA_PEM, codificada em base64, encapsulada em um certificado X.509v3 (RFC 5280). O certificado pode ser autoassinado. Caso contrário, o Cloud IoT Core poderá comparar a assinatura do certificado do dispositivo com os certificados do registro para verificar a origem do certificado.
ES256_PEM A chave pública do algoritmo ECDSA (usando P-256 e SHA-256), codificada em base64. Pode ser usado para verificar tokens JWT com o algoritmo ES256 (RFC 7518). Essa chave pública não está incorporada em um certificado. Isso mantém o tamanho da chave pequeno, que é uma das principais vantagens do ES256.
ES256_X509_PEM Uma chave ES256_PEM, codificada em base64, encapsulada em um certificado X.509v3 (RFC 5280). O certificado pode ser autoassinado. Caso contrário, o Cloud IoT Core poderá comparar a assinatura do certificado do dispositivo com os certificados do registro para verificar a origem do certificado.

Para mais informações sobre como criar chaves, consulte Como criar pares de chaves públicas/privadas.

Troca de chaves

O Cloud IoT Core oferece suporte a várias chaves ativas (até três por dispositivo) para permitir uma rotação ininterrupta. O serviço tentará verificar JWTs com cada uma das chaves ativas e aceitará uma conexão se houver alguma correspondente.

A API permite que você defina um expirationTime para cada credencial de dispositivo (chave pública). Depois de expirar, a chave será ignorada, mas não será excluída automaticamente. Disponibilização de um desvio de relógio de 10 minutos. Se nenhum prazo de validade for especificado para uma chave, ela nunca expirará.

Recomendações de segurança do dispositivo

As recomendações de segurança a seguir não são aplicadas pelo Cloud IoT Core, mas ajudam a proteger seus dispositivos e conexões.

  • Mantenha a chave privada em segredo.
  • Use o TLS 1.2 ao se comunicar com mqtt.googleapis.com ou mqtt.2030.ltsapis.goog nas portas 8883 e 443. Para manter as conexões TLS:
    • Verifique se o certificado do servidor é válido usando um certificado de CA raiz do Google.
    • Faça atualizações de firmware regulares na segurança para manter os certificados do servidor atualizados.
    • Leia esta nota de segurança para ver detalhes dos requisitos de TLS e da compatibilidade futura.
  • Cada dispositivo precisa ter um par de chaves pública/privada exclusiva. Se vários dispositivos compartilharem uma única chave e um deles for comprometido, o invasor poderá falsificar a identidade de todos os dispositivos configurados com essa chave.
  • Mantenha a chave pública segura ao registrá-la com o Cloud IoT Core. Se um invasor conseguir adulterar a chave pública e induzir o provisionador a trocar a chave pública e registrar a chave pública errada, ele poderá fazer a autenticação em nome do dispositivo.
  • O par de chaves usado para autenticar o dispositivo no Cloud IoT Core não pode ser usado para outras finalidades ou protocolos.
  • Dependendo da capacidade do dispositivo de armazenar chaves com segurança, os pares de chaves precisam ser alternados periodicamente. Quando possível, todas as chaves precisam ser descartadas quando o dispositivo é redefinido.
  • Se o dispositivo usa um sistema operacional, atualize-o com segurança. Se o dispositivo não tiver um sistema operacional, atualize o software com segurança se as vulnerabilidades de segurança forem descobertas após a implantação.
  • Certifique-se de que você tenha uma maneira de atualizar certificados raiz. Veja mais detalhes no site da autoridade de Internet do Google.
  • Confira se o relógio do dispositivo não foi adulterado. Se o relógio do dispositivo estiver comprometido, um invasor poderoso poderá enganar o dispositivo para emitir tokens que serão válidos no futuro, burlando o prazo de validade do token. Para melhores resultados, use o Servidor NTP público do Google.