Por que o navegador bloqueia um script de CDN mesmo com o hash certo, se faltar crossorigin?
Porque sem `crossorigin="anonymous"` numa origem diferente da página, a resposta chega como opaca pelas regras de CORS, e uma resposta opaca não expõe seus bytes para o navegador calcular hash nenhum; a verificação de integridade não tem como acontecer, então o recurso é recusado independente do hash estar correto.
Preciso trocar o hash toda vez que o CDN atualiza a biblioteca?
Sim. O `integrity` trava o arquivo exato daquela URL no momento em que o hash foi gerado; se o CDN publicar uma nova versão no mesmo endereço, ou corrigir um bug no arquivo, o hash muda e a página para de carregar o recurso até o `integrity` ser recalculado para o novo conteúdo.
SHA-256, SHA-384 ou SHA-512, qual algoritmo escolher?
Os três protegem igualmente contra alteração do arquivo, porque qualquer mudança de um byte já muda o hash resultante nos três; SHA-384 é a escolha mais comum porque é o que a maioria dos geradores de CDN oferece por padrão, não porque SHA-256 seja inseguro para esse uso.
SRI funciona para um script hospedado no meu próprio domínio?
Funciona, mas o atributo `crossorigin` deixa de ser necessário quando o recurso é da mesma origem da página, já que não há restrição de CORS a contornar; o `integrity` sozinho já garante que o navegador rejeite o script caso o arquivo local seja alterado sem atualizar o hash.