Credential store

As discussed in #312 the credential store will be called when the
authentification is configured, but either username and password
references not existing environment variables or they are both empty
strings. The credential store is an XML file with source, username and
encrypted password. The password is encrypted with the .NET encryption API
on a user account API.
Would something similar fit?

    let getRandomSalt = 
        let minSaltSize = 4
        let maxSaltSize = 8
        let saltSize = Random().Next(minSaltSize, maxSaltSize)
        let saltBytes = Array.create saltSize ( new Byte() )
        (new RNGCryptoServiceProvider()).GetNonZeroBytes(saltBytes)
        saltBytes

    let encrypt (password : string) = 
        let salt = getRandomSalt
        Some {
            Salt = salt
            Password = ProtectedData.Protect(Encoding.UTF8.GetBytes password, salt, DataProtectionScope.CurrentUser)
                       |> Convert.ToBase64String
        }


And then in the credentials.xml
    
    <credential password="" salt="" ...