Daten mit Powershell verschlüsseln
Hallo zusammen,
ich muss einen Ordner mit allen Inhalten bzw. einen ganzen USB Stick verschlüsseln.
Da der Stick an mehrere Personen geht und an verschiedenen PC´s verwendet werden wird, dachte ich an ein Powershell Script.
Bitlocker & Zertifikate würde ich ausschließen, da es sich um keine User mit IT Kenntnissen handelt.
Hat jemand eine Idee wie ich das am besten lösen kann?
Geht so etwas mit einem Powershell Script in welchem ich ein Passwort zum ver- und entschlüsseln eingeben kann?
ich muss einen Ordner mit allen Inhalten bzw. einen ganzen USB Stick verschlüsseln.
Da der Stick an mehrere Personen geht und an verschiedenen PC´s verwendet werden wird, dachte ich an ein Powershell Script.
Bitlocker & Zertifikate würde ich ausschließen, da es sich um keine User mit IT Kenntnissen handelt.
Hat jemand eine Idee wie ich das am besten lösen kann?
Geht so etwas mit einem Powershell Script in welchem ich ein Passwort zum ver- und entschlüsseln eingeben kann?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1002424069
Url: https://administrator.de/forum/daten-mit-powershell-verschluesseln-1002424069.html
Ausgedruckt am: 22.12.2024 um 11:12 Uhr
17 Kommentare
Neuester Kommentar
Hallo joe2017,
das Thema ist nicht wirklich mein Bereich, doch vielleicht kann ich Anregungen geben. Der Knackpunkt wird (so wie ich die Ausgangslage momentan interpretiere) in vielen Fällen der Schlüssel und der Umgang damit sein. Manche Varianten funktionieren nur an dem Host, an dem die Verschlüsselung durchgeführt wurde. Für dich ist der wichtigste Aspekt scheinbar "Benutzerfreundlichkeit". Im Umkehrschluss darf also viel Zeit in das Backend / die Konfiguration fließen :p
Nein, im Ernst: welchen Aufwand darfst und willst du überhaupt treiben?
Der Ansatz von @Tezzla ist eine Überlegung wert und würde die User sicherlich nicht zu sehr fordern.
Grundsätzlich wäre dank @DerWoWusste das hier vielleicht eine Inspiration: Meine Wissenssammlung zu Bitlocker)
Ebenfalls könnte VeraCrypt, BitLocker2Go, eine andere Freeware bzw. kommerzielle oder die vom Hersteller des USB-Sticks mitgelieferte "Software für Verschlüsselung" eine Option sein.
Dann gibt es noch USB-Sticks, die eingebaute Sicherheitschips und je nach Umsetzung ein eigenes Tastenfeld haben (z. B. Kingston DataTraveler 2000 oder 4000).
Was aber konkret für dich sinnig ist, steht derzeit noch in den Sternen ;)
Magst du noch ein wenig mehr über das Szenario und Umfeld schreiben? Das hilft sehr, zielgerichtet zu antworten. Auch fallen dann "automatisch" Optionen weg oder kommen hinzu. Mir persönlich sind z. B. noch folgende Sachen unklar:
- Alles innerhalb eines Unternehmens? Sind externe Personen beteiligt?
- Warum geht "nur" ein USB-Stick? Wären Netzlaufwerke mit entsprechender Zugangsbeschränkung eine Option?
- Wie ist der Ablauf oder Arbeitsprozess während der Nutzung (exemplarisch "User steckt USB-Stick ein, entschlüsselt ihn, macht sein Ding, verschlüsselt ihn danach, steckt ihn ab und übergibt den Stick der nächsten Person (die damit das Gleiche in Grün tut)")?
- Ist der Benutzerkreis eher fix oder eher wechselnd?
- Was passiert, wenn der USB-Stick kaputt oder verloren geht?
- Wie gut kennst du dich selbst mit der Materie aus? Stichwort Support.
- Ist schon irgendwas mit Schwerpunkt "Endpoint Security" im Einsatz? Solche Lösungen bringen manchmal auch Verschlüsselungsoptionen für Wechselmedien mit.
- Da du PowerShell und BitLocker erwähnst: sind nur Windows Geräte im Spiel? Wenn ja, was habt ihr an Lizenzen für die Betriebssysteme ("SBS" / "Home" oder besser)?
- Ist ein AD vorhanden und in Nutzung?
- Gibt es eine Zertifikatsstelle?
- Fat- oder Thinclients?
- Stehen Eingabegeräte für biometrische Authentifizierung zur Verfügung?
das Thema ist nicht wirklich mein Bereich, doch vielleicht kann ich Anregungen geben. Der Knackpunkt wird (so wie ich die Ausgangslage momentan interpretiere) in vielen Fällen der Schlüssel und der Umgang damit sein. Manche Varianten funktionieren nur an dem Host, an dem die Verschlüsselung durchgeführt wurde. Für dich ist der wichtigste Aspekt scheinbar "Benutzerfreundlichkeit". Im Umkehrschluss darf also viel Zeit in das Backend / die Konfiguration fließen :p
Nein, im Ernst: welchen Aufwand darfst und willst du überhaupt treiben?
Der Ansatz von @Tezzla ist eine Überlegung wert und würde die User sicherlich nicht zu sehr fordern.
Grundsätzlich wäre dank @DerWoWusste das hier vielleicht eine Inspiration: Meine Wissenssammlung zu Bitlocker)
Ebenfalls könnte VeraCrypt, BitLocker2Go, eine andere Freeware bzw. kommerzielle oder die vom Hersteller des USB-Sticks mitgelieferte "Software für Verschlüsselung" eine Option sein.
Dann gibt es noch USB-Sticks, die eingebaute Sicherheitschips und je nach Umsetzung ein eigenes Tastenfeld haben (z. B. Kingston DataTraveler 2000 oder 4000).
Was aber konkret für dich sinnig ist, steht derzeit noch in den Sternen ;)
Magst du noch ein wenig mehr über das Szenario und Umfeld schreiben? Das hilft sehr, zielgerichtet zu antworten. Auch fallen dann "automatisch" Optionen weg oder kommen hinzu. Mir persönlich sind z. B. noch folgende Sachen unklar:
- Alles innerhalb eines Unternehmens? Sind externe Personen beteiligt?
- Warum geht "nur" ein USB-Stick? Wären Netzlaufwerke mit entsprechender Zugangsbeschränkung eine Option?
- Wie ist der Ablauf oder Arbeitsprozess während der Nutzung (exemplarisch "User steckt USB-Stick ein, entschlüsselt ihn, macht sein Ding, verschlüsselt ihn danach, steckt ihn ab und übergibt den Stick der nächsten Person (die damit das Gleiche in Grün tut)")?
- Ist der Benutzerkreis eher fix oder eher wechselnd?
- Was passiert, wenn der USB-Stick kaputt oder verloren geht?
- Wie gut kennst du dich selbst mit der Materie aus? Stichwort Support.
- Ist schon irgendwas mit Schwerpunkt "Endpoint Security" im Einsatz? Solche Lösungen bringen manchmal auch Verschlüsselungsoptionen für Wechselmedien mit.
- Da du PowerShell und BitLocker erwähnst: sind nur Windows Geräte im Spiel? Wenn ja, was habt ihr an Lizenzen für die Betriebssysteme ("SBS" / "Home" oder besser)?
- Ist ein AD vorhanden und in Nutzung?
- Gibt es eine Zertifikatsstelle?
- Fat- oder Thinclients?
- Stehen Eingabegeräte für biometrische Authentifizierung zur Verfügung?
Wie wäre es denn direkt mit verschlüsselten USB-Sticksß https://www.kingston.com/germany/de/usb-flash-drives/datatraveler-2000-e ...
VG
VG
Moin @joe2017,
Ein Bekannter also. Warum warst Du nicht ehrlich zu ihm und hast gesagt: "Puh, knifflige Frage. Melde Dich doch bei Administrator.de an und stelle Sie dort. Mir wird dort auch immer geholfen." ? Du solltest doch Wissen, dass "stille Post" immer Kontraproduktiv ist. Informationen gehen immer Verloren, wenn Sie nicht aus erster Hand kommen. Wenn du ihm wirklich helfen willst, verweise auf diesen Lesestoff.
USB-Sticks an einem Privat-Rechner stecken und dann an einen Firmen-Rechner? Den Mitarbeitern würde ich die Hand mit einem Lineal bearbeiten. In einer Klosterschule ist dies ja auch gängige Praxis.
Wenn das nicht hilft, nehme ich ihm die Maus weg.
Des Weiteren hast du einen "Beitrag" geschrieben und kein "Ticket" geöffnet.
Bei einem Ticket, würde jeder First-Level-Mitarbeiter das Teil einfach Schließen. Begründung: Mangelnde Informationen.
Gruß
C.C.
Ein Bekannter also. Warum warst Du nicht ehrlich zu ihm und hast gesagt: "Puh, knifflige Frage. Melde Dich doch bei Administrator.de an und stelle Sie dort. Mir wird dort auch immer geholfen." ? Du solltest doch Wissen, dass "stille Post" immer Kontraproduktiv ist. Informationen gehen immer Verloren, wenn Sie nicht aus erster Hand kommen. Wenn du ihm wirklich helfen willst, verweise auf diesen Lesestoff.
USB-Sticks an einem Privat-Rechner stecken und dann an einen Firmen-Rechner? Den Mitarbeitern würde ich die Hand mit einem Lineal bearbeiten. In einer Klosterschule ist dies ja auch gängige Praxis.
Wenn das nicht hilft, nehme ich ihm die Maus weg.
Des Weiteren hast du einen "Beitrag" geschrieben und kein "Ticket" geöffnet.
Bei einem Ticket, würde jeder First-Level-Mitarbeiter das Teil einfach Schließen. Begründung: Mangelnde Informationen.
Gruß
C.C.
Hi
Bitlocker, verschlüssle die Geräte vor Herausgabe und versende die dann, der Aufwand hält sich absolut in Grenzen. Wir haben für einen großen Teilbereich rund 200 USB Sticks so vorbereitet und jedem Stick ein eigenes Kennwort / eigenen PIN gegeben, da war unser Azubi mit einem Praktikanten gut ein Tag mit beschäftigt.
Hat als netten Nebeneffekt den Vorteil, das man den Wiederherstellungsschlüssel vorliegen hat und der Benutzer ggf. das Passwort selbst ändern kann, sobald die Leute, vor allem unerfahrene, da selbst Hand anlegen, kann es am Ende schnell zu Problemen kommen.
Bestimmte Personengruppen bei uns können unverschlüsselte Sticks nur lesen, wenn man schreiben möchte, muss Bitlocker aktiviert werden, die Restore-Information werden dann zurück ins SCCM geschrieben (mein aktueller Wissensstand, ist nicht mein Fachbereich bei uns).
Bitlocker ist in dem dargestellten Szenario die Wahl Nr. 1, 100% kompatibel zu Windows 7 - 10, keine extra Software nötig und Anwendung kinderleicht, alles andere mit extra Tools macht die Sache nur komplizierter.
Just my 2 Cent
@clSchak
Bitlocker, verschlüssle die Geräte vor Herausgabe und versende die dann, der Aufwand hält sich absolut in Grenzen. Wir haben für einen großen Teilbereich rund 200 USB Sticks so vorbereitet und jedem Stick ein eigenes Kennwort / eigenen PIN gegeben, da war unser Azubi mit einem Praktikanten gut ein Tag mit beschäftigt.
Hat als netten Nebeneffekt den Vorteil, das man den Wiederherstellungsschlüssel vorliegen hat und der Benutzer ggf. das Passwort selbst ändern kann, sobald die Leute, vor allem unerfahrene, da selbst Hand anlegen, kann es am Ende schnell zu Problemen kommen.
Bestimmte Personengruppen bei uns können unverschlüsselte Sticks nur lesen, wenn man schreiben möchte, muss Bitlocker aktiviert werden, die Restore-Information werden dann zurück ins SCCM geschrieben (mein aktueller Wissensstand, ist nicht mein Fachbereich bei uns).
Bitlocker ist in dem dargestellten Szenario die Wahl Nr. 1, 100% kompatibel zu Windows 7 - 10, keine extra Software nötig und Anwendung kinderleicht, alles andere mit extra Tools macht die Sache nur komplizierter.
Just my 2 Cent
@clSchak
@clSchak
Da kann ich nur zustimmen, bis auf:
Da kann ich nur zustimmen, bis auf:
100% kompatibel zu Windows 7 - 10
Das gilt nur, wenn man, falls man Win10 zum Verschlüsseln benutzt, AES256 nutzt und nicht XTS_AES, welches Win7/8.x gar nicht lesen können.Zitat von @joe2017:
Geht so etwas mit einem Powershell Script in welchem ich ein Passwort zum ver- und entschlüsseln eingeben kann?
Servus.Geht so etwas mit einem Powershell Script in welchem ich ein Passwort zum ver- und entschlüsseln eingeben kann?
Ohne jetzt Vor- und Nachteile diskutieren zu wollen, das haben ja die Kollegen schon übernommen, trotzdem noch etwas praktischer Code der sich einzig und allein auf den Thread-Titel bezieht.
Persönlich würde ich da auch zu fertigen Lösungen(s.o.) greifen oder wenn komfortabel dann zumindest das ganze als c# zu verpacken um dem User das Mit Executionpolicy & Co zu ersparen.
Die beiden Funktionen (Encrypt-File / Decrypt-File) Verschlüsseln symmetrisch mit AES-256 mit Passwort und anpassbarem Salt und bieten zusätzlich die Option das Original gleich zu "schreddern" also mit Nullen oder Random-Data zu überschreiben, und arbeiten nativ auch in der Pipeline von Get-ChildItem.
Wer's gebrauchen kann, gerne bedienen oder auch an seine Bedürfnisse anpassen.
function Encrypt-File {
[cmdletbinding(SupportsShouldProcess=$true)]
param(
[Parameter(mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][ValidateNotNullOrEmpty()][ValidateScript({Test-Path $_})][Alias('FullName')][string[]]$path,
[Parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$password,
[Parameter(mandatory=$false)][ValidateNotNullOrEmpty()][string]$salt='jj3h4h5+tbbj2j281273#+',
[Parameter(mandatory=$false,HelpMessage='Overwrites original with zeros and finally deletes the file.')][ValidateNotNullOrEmpty()][switch]$shredoriginal,
[Parameter(mandatory=$false)][ValidateNotNullOrEmpty()][ValidateSet('Zeros','RandomData')][string]$shredmethod = 'Zeros',
[Parameter(mandatory=$false)][ValidateNotNullOrEmpty()][switch]$force
)
begin{
$p = new-Object System.Security.Cryptography.AesManaged
$p.Key = (new-Object Security.Cryptography.PasswordDeriveBytes ([Text.Encoding]::UTF8.GetBytes($password)), ([Text.Encoding]::UTF8.GetBytes($salt)), "SHA256", 5).GetBytes(32) #256/8
$p.IV = (new-Object Security.Cryptography.SHA256Managed).ComputeHash([Text.Encoding]::UTF8.GetBytes($salt))[0..15]
$encryptor = $p.CreateEncryptor()
if ($shredoriginal.IsPresent){
$shredcollection = New-Object System.Collections.ArrayList
}
}
process{
foreach($file in $path){
$fsEncrypt = $null
$csEncrypt = $null
$fsRead = $null
try{
if ($pscmdlet.ShouldProcess($file, "Encrypt file")){
$fileout = "$file.encrypt"
if ((Test-Path $fileout) -and !$force.IsPresent){
throw "File '$fileout' already exists, to overwrite the file regardless if it exists, use the -force switch!"
}
$fsEncrypt = New-Object System.IO.FileStream $fileout, "Create"
$csEncrypt = New-Object Security.Cryptography.CryptoStream $fsEncrypt,$encryptor,"Write"
$fsRead = New-Object System.IO.FileStream $path, "Open"
$fsRead.CopyTo($csEncrypt)
$fsRead.Close()
$csEncrypt.Close()
$fsEncrypt.Close()
if ($shredoriginal.IsPresent){
[void]$shredcollection.Add($file)
}
return (gi $fileout)
}
}catch{
Write-Error $_.Exception.Message
}finally{
if($fsEncrypt){$fsEncrypt.dispose()}
if ($csDecrypt){$csDecrypt.Dispose()}
if ($fsRead){$fsRead.Dispose()}
}
}
}
end{
if ($shredoriginal.IsPresent){
if ($pscmdlet.ShouldProcess('all above files','Shred files')){
$crypto = New-Object System.Security.Cryptography.RNGCryptoServiceProvider
foreach ($file in $shredcollection){
$fs = $null
try{
$fs = New-Object System.IO.FileStream $file, ([System.IO.FileMode]::Open)
$data = $null
switch($shredmethod){
'Zeros' {
$data = New-Object 'Byte' $fs.Length
}
'RandomData' {
$data = New-Object 'Byte' $fs.Length
$crypto.GetBytes($data)
}
}
$fs.Write($data,0,$data.Length)
$fs.Close()
del $file -Force
}catch{
Write-Error $_.Exception.Message
}finally{
if ($fs){$fs.Dispose()}
}
}
}
}
$p.Clear()
}
}
function Decrypt-File {
[cmdletbinding(SupportsShouldProcess=$true)]
param(
[Parameter(mandatory=$true,ValueFromPipeline=$true,ValueFromPipelineByPropertyName=$true)][ValidateNotNullOrEmpty()][ValidateScript({Test-Path $_})][Alias('FullName')][string[]]$path,
[Parameter(mandatory=$true)][ValidateNotNullOrEmpty()][string]$password,
[Parameter(mandatory=$false)][ValidateNotNullOrEmpty()][string]$salt='jj3h4h5+tbbj2j281273#+',
[Parameter(mandatory=$false,HelpMessage='Deletes encrypted file after successfull decryption')][switch]$DeleteEncrypted,
[Parameter(mandatory=$false)][switch]$force
)
begin{
$p = new-Object System.Security.Cryptography.AesManaged
$p.Key = (new-Object Security.Cryptography.PasswordDeriveBytes ([Text.Encoding]::UTF8.GetBytes($password)), ([Text.Encoding]::UTF8.GetBytes($salt)), "SHA256", 5).GetBytes(32) #256/8
$p.IV = (new-Object Security.Cryptography.SHA256Managed).ComputeHash( [Text.Encoding]::UTF8.GetBytes($salt) )[0..15]
$decryptor = $p.CreateDecryptor()
}
process{
$fsReadDecrypt = $null
$fsWriteDecrypt = $null
$csDecrypt = $null
foreach ($file in $path){
try{
if ($pscmdlet.ShouldProcess($file, "Decrypt file")){
$fileout = $file -replace '\.encrypt$'
if ((Test-Path $fileout) -and !$force.IsPresent){
throw "File '$fileout' already exists, to overwrite the file regardless if it exists, use the -force switch!"
}
$fsReadDecrypt = New-Object System.IO.FileStream $path, "Open"
$fsWriteDecrypt = New-Object System.IO.FileStream $fileout, "Create"
$csDecrypt = New-Object Security.Cryptography.CryptoStream $fsReadDecrypt,$decryptor,"Read"
$csDecrypt.CopyTo($fsWriteDecrypt)
$csDecrypt.Close()
$fsReadDecrypt.Close()
$fsWriteDecrypt.Close()
if ($DeleteEncrypted.IsPresent){
del $file -Force
}
return (gi $fileout)
}
}catch [System.Security.Cryptography.CryptographicException] {
Write-Error "Password is not incorrect." -Category InvalidArgument
}catch{
Write-Error $_.Exception.Message
}finally{
if ($fsReadDecrypt){$fsReadDecrypt.Dispose()}
if ($fsWriteDecrypt){$fsWriteDecrypt.Dispose()}
if ($csDecrypt){$csDecrypt.Dispose()}
}
}
}
end{
$p.Clear()
}
}
# Encrypt some files
#ls 'D:\data' -File -Filter *.jpg | Encrypt-File -password 'Passw0rd' -force -shredoriginal
# Decrypt some files
#ls 'D:\data' -File -Filter *.encrypt | Decrypt-File -password 'Passw0rd' -force
ich bin mir immer noch nicht sicher ob @colinardo ein Bot ist ... fasziniert mich immer wieder wie und aus "dem ff" das fertige Script herauskommt, ich warte bei uns immer eine Ewigkeit auf die Entwickler wenn Ich nur eine Kleinigkeit haben möchte
rrr...klck...ratrat...zisch...summmm, Daten zu unspezifisch, bitte Eingabe wiederholen ... .
ich bin mir immer noch nicht sicher ob @colinardo ein Bot ist
Wo findet man denn Bots, die was auf dem Kasten haben?