[PowerShell] Cmdlets per proteggere i dati con DPAPI

Le DPAPI, per chi non le conoscesse, sono una manciata di API (CryptProtectData/CryptUnprotectData e CryptProtectMemory/CryptUnprotectMemory) con l'obiettivo di cryptare dati senza caricare l'utente o l'applicazione delle problematiche non banali associate allo gestione di una chiave.

Senza entrare nei dettagli, per i quali rimando al link precedente, la chiave usata da CryptProtectData è dipendente dalla password dell'account utente, per cui, in caso di reset della password, i dati precedentemente cryptati diventano inaccessibili. Questo livello di privacy è tipicamente considerato sufficiente in un'ampia gamma di applicazioni. Si pensi ad esempio alle password memorizzate da Internet Explorer per i siti web o da Explorer per accedere a risorse di rete (SMB, etc).

In .Net le DPAPI sono disponibili tramite P/Invoke, che ho wrappato in una piccola class library a sua volta referenziata da un assembly contenente un paio di cmdlets e uno snapin per l'installazione in PowerShell.  

Trovate binari e sorgenti qui: www.alessandropilotti.com/DPAPICmdlet-1.0.0.zip pubblicati con licenza MIT, ovvero fatene (quasi) ciò che vi pare. Leggete ReadMe.txt per installazione e utilizzo.

 Le cmdlets fornite sono 2 e sono di utilizzo a dir poco immediato:

  • Get-ProtectedData
  • Get-UnprotectedData

Ecco un semplice esempio. I dati, una volta cryptati vengono serializzati in un file temporaneo, dopodichè vengono deserializzati e decryptati.

# Simple Protect/Unprotect data sample.
# Encrypted data is persisted as xml
 
# Encrypt and export data
$d = [System.Text.Encoding]::UTF8.GetBytes("ciao")
@(,$d) | Get-ProtectedData | Export-CliXml $env:temp\test.xml
Remove-Variable d
 
# Import and decrypt data
$d = Import-CliXml $env:temp\test.xml | Get-UnprotectedData
$t = [System.Text.Encoding]::UTF8.GetString($d)
 
"Clear text: $t"

Riprendiamo l'esempio precedente, questa volta fornendo un'entropia aggiuntiva e definendo esplicitamente uno store (vi rimando alla documentazione su DPAPI per questi concetti).

# Simple Protect/Unprotect data sample using the given additional entropy 
# and assigned store. Encrypted data is persisted as xml
 
$e = [System.Text.Encoding]::UTF8.GetBytes("some additional entropy")
 
# Encrypt and export data
$d = [System.Text.Encoding]::UTF8.GetBytes("ciao")
@(,$d) | Get-ProtectedData -entropy $e -store Machine | Export-CliXml $env:temp\test.xml
 
# Import and decrypt data
$d = Import-CliXml $env:temp\test.xml | Get-UnprotectedData -entropy $e -store Machine
$t = [System.Text.Encoding]::UTF8.GetString($d)
 
"Clear text: $t"
 
 

HTC Dream - Pinguini androidi in Australia

HTC ha annunciato oggi la disponibilità del suo HTC Dream basato su Android in Australia a partire dal 16 febbraio per un provider locale (Optus)

Android per chi non lo sapesse, è un Linux embedded destinato a dispositivi mobile patrocinato in particolare da Google.
Si tratta di una scappatella coniugale di HTC da Windows Mobile o c'è di più? Vedremo...

Dal punto di vista di noi poveri dev, Android è esattamente quello che ci mancava: l'ennesima piattaforma che ci farà dannare col porting di applicazioni e librerie!

Non bastasse, Google tra le altre ha creato per l'occasione una virtual machine chiamata Dalvik, dotata di un proprio bytecode, destinata a ottimizare le ristrette risorse disponibili. Da notare l'assenza di un JIT compiler.

Dalvik permette di prendere bytecode Java (file .class) e compilarlo nel proprio bytecode (file .dex) tramite un tool chiamato dx.

Si può pensare di fare analogamente cross compiling dal CIL di .Net al bytecode devx. 


Una buona notizia è che Mono è stato portato su Androd per cui, problemucci di deployment a parte, ci si può ragionare. Occorreranno naturalmente i binding per le librearie native della piattaforma, ma questo non è un dramma.

In termini di performance, a giudicare da un semplice test, Mono da quintali di biada a Dalvik, ma aspetterei dei test più strutturati prima di fare commenti. 

Windows Mobile 6.1 - Patch per inviare posta con account POP3 e IMAP4

Avete un HTC Diamond o altro device VM 6.1 che si ostina a non inviare le vostre email ignorando le configurazione SMTP che gli propinate?

Microsoft ha rilasciato una patch un paio di mesi fa che probabilmente fa al caso vostro.

Il problema riguarda indifferente tutti i device WM 6.1, i cui provider non hanno implementato la feature descritta nel link sopra. 

Nota: Se usate Tre con connessione UMTS/HSDPA ricordate di impostare l'infamous "smtp.tre.biz" al posto del vostro abituale server SMTP.