O Media CDN usa pares de chaves criptográficas ao assinar solicitações. O Media CDN usa um conjunto de chaves para armazenar pares de chaves que são usados ativamente para assinar solicitações. É possível ter até três chaves públicas e três chaves compartilhadas de validação, totalizando seis chaves por conjunto de chaves.
Também é possível remover chaves não usadas de um conjunto de chaves. Adicionar e remover uma chave é normalmente chamado de rotação de chave secreta. A rotação de segredos permite fazer o seguinte:
- Adicione novos segredos a um conjunto de chaves com segurança anexando-os a ele.
- Gere tokens com o secret correspondente.
Remova segredos antigos depois que o token mais antigo expirar.
Por exemplo, digamos que você definiu que os tokens de curta duração expiram após uma hora. Em seguida, remova a chave secreta mais antiga usada para os tokens de curta duração depois que as novas solicitações forem enviadas aos usuários por uma ou mais horas.
Antes de remover um secret não usado, verifique se ele não está sendo referenciado ou buscado para
assinar solicitações de usuários no servidor do aplicativo. A remoção prematura de um secret
de um conjunto de chaves impede que o Media CDN valide as solicitações
associadas a ele. Os usuários afetados recebem uma resposta HTTP 403
Forbidden
.
Para otimizar a performance, a confiabilidade e o custo de acessos simultâneos ao Secret Manager, os segredos de chave de validação compartilhados são armazenados em cache por até uma hora. O armazenamento em cache de segredos pode resultar no acesso contínuo de tokens depois que um secret é excluído do Secret Manager por até uma hora.
Como prática recomendada, alterne as chaves regularmente.
Limitações conhecidas
O Media CDN rejeita solicitações assinadas com as assinaturas simétricas usadas pelo Cloud CDN com uma resposta HTTP 403
.
No momento, o Media CDN oferece suporte a chaves simétricas com solicitações que usam
o formato de token e as chaves referenciadas pelo Media CDN.
As chaves assimétricas precisam ser geradas como pares Ed25519, com uma chave privada de 512 bits (64 bytes) e uma chave pública de 256 bits (32 bytes). A biblioteca Tink tem suporte para geração, assinatura e validação de chaves Ed25519 com C++, Go, Java e Objective-C.
As chaves assimétricas precisam ter as seguintes características:
Ser codificado em base64 com um comprimento de 44 bytes (com padding) ou 43 bytes (sem padding). Os formatos base64 com e sem preenchimento são aceitos.
A chave pública precisa ser codificada no formato base64 seguro para URL. A chave privada pode ser codificada no formato base64 padrão.
Ter uma chave privada correspondente.