ECSS - Modulo 10
Criptografia, hash e assinatura digital
O aluno vai validar integridade de arquivos, assinar um script e proteger uma mensagem usando certificados locais. O exercicio usa recursos nativos do Windows e nao exige maquina adicional.
Resumo
- Duracao
- 35 a 50 min
- VM principal
- Windows 11
- Opcional
- Windows Server
- Ferramentas
- PowerShell, certutil
- Custo extra
- Nenhum
Objetivos do lab
- Calcular hashes SHA-256 e MD5 de arquivos.
- Comprovar que pequenas alteracoes mudam completamente o hash.
- Criar certificado local para assinatura de codigo.
- Assinar e validar um script PowerShell.
- Criptografar e descriptografar uma mensagem com certificado local.
- Relacionar os resultados com integridade, confidencialidade, autenticidade e nao repudio.
Antes de comecar
Execute os comandos no Windows 11 do seu student. Use PowerShell como administrador quando possivel. Nao use dados reais de clientes, alunos ou empresa.
1. Criar os arquivos de teste
Crie uma pasta local e dois arquivos simples para o exercicio.
New-Item -ItemType Directory -Path C:\ECSS-M10 -Force | Out-Null
"Relatorio financeiro interno - ECSS" | Out-File C:\ECSS-M10\relatorio.txt -Encoding utf8
"Write-Host 'Script aprovado pelo instrutor'" | Out-File C:\ECSS-M10\script-lab.ps1 -Encoding utf8
Get-ChildItem C:\ECSS-M10
Resultado esperado: os arquivos relatorio.txt e script-lab.ps1 aparecem em C:\ECSS-M10.
2. Calcular hashes do arquivo
Use dois algoritmos para comparar a saida. SHA-256 e preferivel para uso moderno; MD5 aparece aqui apenas para comparacao historica.
Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256
Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm MD5
certutil -hashfile C:\ECSS-M10\relatorio.txt SHA256
Anote: copie o hash SHA-256 original no seu relatorio.
3. Simular alteracao nao autorizada
Altere o conteudo do arquivo e compare o hash antigo com o novo.
$HashOriginal = (Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256).Hash
"Alteracao nao autorizada" | Add-Content C:\ECSS-M10\relatorio.txt
$HashNovo = (Get-FileHash C:\ECSS-M10\relatorio.txt -Algorithm SHA256).Hash
$HashOriginal
$HashNovo
$HashOriginal -eq $HashNovo
Resultado esperado: a comparacao retorna False. Isso mostra que o hash detecta perda de integridade.
4. Criar certificado para assinatura de codigo
Crie um certificado local de assinatura de codigo no perfil do usuario atual.
$cert = New-SelfSignedCertificate -Subject "CN=ECSS Lab Student" -Type CodeSigningCert -CertStoreLocation Cert:\CurrentUser\My
$cert.Thumbprint
Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert
Anote: o Thumbprint do certificado criado.
5. Assinar e validar o script
Assine o script criado no inicio do lab e veja o status da assinatura.
Set-AuthenticodeSignature -FilePath C:\ECSS-M10\script-lab.ps1 -Certificate $cert
Get-AuthenticodeSignature C:\ECSS-M10\script-lab.ps1 | Format-List Status,SignerCertificate
Se o status aparecer como UntrustedRoot, significa que o script foi assinado, mas o certificado ainda
nao e confiavel para o Windows. Para confiar no certificado apenas neste lab, execute:
Export-Certificate -Cert $cert -FilePath C:\ECSS-M10\ecss-code-signing.cer
Import-Certificate -FilePath C:\ECSS-M10\ecss-code-signing.cer -CertStoreLocation Cert:\CurrentUser\Root
Import-Certificate -FilePath C:\ECSS-M10\ecss-code-signing.cer -CertStoreLocation Cert:\CurrentUser\TrustedPublisher
Get-AuthenticodeSignature C:\ECSS-M10\script-lab.ps1 | Format-List Status
6. Criptografar uma mensagem com certificado
Crie um certificado de protecao de documentos e proteja um arquivo sensivel com CMS.
$encCert = New-SelfSignedCertificate -Subject "CN=ECSS Data Protection" -Type DocumentEncryptionCert -CertStoreLocation Cert:\CurrentUser\My
"Senha temporaria do lab: Pa`$`$w0rd" | Out-File C:\ECSS-M10\segredo.txt -Encoding utf8
Protect-CmsMessage -To $encCert -Path C:\ECSS-M10\segredo.txt -OutFile C:\ECSS-M10\segredo.cms
Get-Content C:\ECSS-M10\segredo.cms
Unprotect-CmsMessage -Path C:\ECSS-M10\segredo.cms
Resultado esperado: o arquivo segredo.cms nao mostra o texto original. O comando
Unprotect-CmsMessage recupera a mensagem usando a chave privada local.
7. Evidencias para entregar
- Hash SHA-256 original e hash apos alteracao.
- Status da assinatura do script.
- Print ou texto mostrando que a mensagem criptografada foi recuperada.
- Resposta curta: qual controle garante integridade? Qual controle garante confidencialidade?
Perguntas de revisao
- Por que o hash muda mesmo com uma pequena alteracao no arquivo?
- Qual e a diferenca entre hash e criptografia?
- O que uma assinatura digital prova sobre um arquivo?
- Por que um certificado autoassinado nao deve ser automaticamente confiado em producao?