That's the thing, at this point, I can't even get a limited user to read the keys.
For some reason this line:
cp.KeyContainerName = "testCon"
apparently tells the framework to try to create the container, but the documentation says that it also should define a container to read. Even when this code:
Dim cp As New CspParameters()
Dim userRule As AccessControl.CryptoKeyAccessRule = Nothing
Dim adminRule As AccessControl.CryptoKeyAccessRule = Nothing
Dim cks As AccessControl.CryptoKeySecurity = Nothing
userRule = New AccessControl.CryptoKeyAccessRule("Users", AccessControl.CryptoKeyRights.FullControl, AccessControl.AccessControlType.Allow)
adminRule = New AccessControl.CryptoKeyAccessRule("Administrators", AccessControl.CryptoKeyRights.FullControl, ccessControl.AccessControlType.Allow)
cks = New AccessControl.CryptoKeySecurity
cks.AddAccessRule(adminRule)
cks.AddAccessRule(userRule)
cp.CryptoKeySecurity = cks
is run as an administrator, it still has no effect.