Cifrar Datos con cmdlets PowerShell
Cifrar Datos con cmdlets PowerShell

Cómo Cifrar Datos con los cmdlets de PowerShell

Aquí hay tres comandos que puedes usar para cifrar y descifrar datos. Y claro, utilizando los cmdlets de PowerShell ¿no sabes cómo? no te preocupes.

Cifrar datos en la actualidad es muy importante si desea mantener las cosas en secreto sin la amenaza de que otra persona vea cosas tales como contraseñas, información sensible, etc. Entonces podemos cifrar los datos usando los cmdlets disponibles en PowerShell V5.

Por cierto, si quieres una guía de inicio en PowerShell, aquí tienes 😉


1. Introducción al Cifrado en PowerShell

Hay tres comandos que componen el conjunto de cmdlets del Sintaxis de Mensajes Criptográficos (Cryptographic Message Syntax – CMS) que puede usar para cifrar y descifrar datos. Estos cmdlets utilizan una criptografía de clave pública: donde hay una clave pública (que se usa para el cifrado) y una clave privada (que se usa para el descifrado). La clave pública, como su nombre lo indica, puede entregarse para permitir que otros cifren los datos, pero la clave privada es algo que desea mantener bajo control. Si alguien en quien no confía obtiene acceso a esta clave privada, puede usarla para descifrar todos sus datos. Si desea más información, puede leer aquí sobre CMS RFC.

Los tres cmdlets que están disponibles para usar son:

  • Protect-CMSMessage: Es lo que usará para cifrar los datos que luego se guardarían en un archivo.
  • UnProtect-CMSMessage: Es lo que se usará para descifrar el documento/archivo.
  • Get-CMSMessage: Permite ver más datos sobre el documento cifrado, como quién puede descifrarlo.

Antes de que podamos comenzar a trabajar con estos cmdlets, debemos compilar un certificado que admita el cifrado que pretendemos. Para esto, crearé un archivo .inf que luego será utilizado en mi solicitud de certificado para generar un certificado de cifrado.

2. Creando un Certificado de Cifrado

Antes que nada deberá tener en cuenta lo siguiente:

  • Todo los comandos se ejecutan en Windows PowerShell, así que primero deberá abrir la consola.


  • Es importante la ubicación donde trabaja, por ejemplo, para el caso de los certificados; al ejecutar los comandos sólo funcionará si está en la misma ruta que el archivo.
Archivos para Cifrar Datos con los cmdlets
Archivos para Cifrar Datos con los cmdlets

A continuación, copie y pegue el siguiente texto y guárdelo como DocumentEncryption.inf:


Signature = "$Windows NT$"

szOID\_ENHANCED\_KEY\_USAGE = "2.5.29.37"
szOID\_DOCUMENT\_ENCRYPTION = "1.3.6.1.4.1.311.80.1"

Subject = "cn=alexynior@localhost.local"
MachineKeySet = false
KeyLength = 2048
KeySpec = AT_KEYEXCHANGE
HashAlgorithm = Sha1
Exportable = true
RequestType = Cert
KeyUsage = "CERT_KEY_ENCIPHERMENT_KEY_USAGE |  CERT_DATA_ENCIPHERMENT_KEY_USAGE"
ValidityPeriod = "Years"
ValidityPeriodUnits = "1000"

%szOID\_ENHANCED\_KEY\_USAGE% = "{text}%szOID\_DOCUMENT\_ENCRYPTION%"

Creamos el certificado de cifrado:

certreq.exe -new DocumentEncryption.inf DocumentEncryption.cer
CertReq Certificado creado e instalado
CertReq: Certificado creado e instalado

Verifiquemos que el certificado esté cargado en el almacén de certificados de mi usuario:

Get-ChildItem -Path Cert:\CurrentUser\My -DocumentEncryptionCert
Verificar certificado de Cifrado
Verificar certificado de Cifrado

3. Cifrado de Datos con los cmdlets de PowerShell

Ahora que tenemos un certificado de cifrado creado y cargado en nuestro almacén de certificados, podemos comenzar a cifrar los datos y luego intentar descifrarlos.

$Text = '¡Esta es una información que debemos cifrar para que nadie más pueda leerla!'

El anterior comando lo guardaremos en un archivo TXT, así:

Protect-CmsMessage -To 'cn=alexynior@localhost.local'  -Content $Text  -OutFile MiTextoCifrado.txt

Tenga en cuenta los siguiente parámetros:

  • -To: es donde especificaré la línea exacta del Subject que expliqué al crear el archivo de solicitud para el certificado de cifrado.
  • -Content: es la información real que se cifrará, mientras que -OutFile especifica la ubicación del archivo del texto cifrado.

Puede abrir el documento con doble clic si gusta, pero es mejor ver el documento usando Get-Content, que no nos mostrará nada útil más que los datos encriptados.

Get-Content .\MiTextoCifrado.txt
Mi Texto Cifrado en PowerShell
Mi Texto Cifrado en PowerShell

No es exactamente algo útil para una persona que no tiene la clave privada, leer los datos. Podemos utilizar el cmdlet Get-CMSMessage para obtener más información sobre este documento cifrado:

Get-CmsMessage -Path .\MiTextoCifrado.txt
Información con Get-CmsMessage
Información con Get-CmsMessage

En la anterior imagen podemos ver información como los destinatarios y los datos cifrados (aún encriptados).


Finalmente, usando la clave privada podemos elegir la salida de Get-CMSMessage y Unprotect-CMSMessag para descifrar el mensaje.

Get-CmsMessage -Path .\MiTextoCifrado.txt |
 Unprotect-CmsMessage -To 'cn=alexynior@localhost.local'
Descifrar datos con Unprotect-CmsMessage
Descifrar datos con Unprotect-CmsMessage

4. Conclusión

Como puede ver, pude descifrar el mensaje usando la clave privada y ver los datos dentro de él. Esto proporciona una excelente manera de mantener sus datos privados cifrados, ¡pero asegúrese de proteger la clave privada a toda costa! Si eso se pone en peligro, cualquiera que tenga acceso a la clave privada ahora tiene acceso a sus datos encriptados.

https://youtu.be/Xny-CFd7v9g

¡Hasta pronto, y si te ha gustado comparte el artículo 😉 !

Mi Carro Close (×)

Tu carrito está vacío
Ver tienda