Does anyone have any suggestions on how I can make my model more secure?
You are correct that any service running under vulnerable network services could potentially gain access to the private key. Sometime in 2005 or so, Microsoft realized this and began creating unique service accounts to limit the damage caused by a common compromised service, such as Network Services. For example, the SQL server has been moved to its service account, IIRC.
The main problem is the security design problem with the Microsoft model, and you cannot handle it. Microsoft realized this and moved on to a slightly different model with CryptoNG, IIRC. In CryptoNG, operations using the private key fail, and IPC is used to transfer requests and results between the service and the process that performs the key operations. This is mainly about the issue you are worried about.
Even in the new model, you still need software that introduces the model. You should be fine, say, IIS 7, but Apache can cause problems because its model only recognizes file system ACLs.
Moving key operations outside the process is becoming standard practice. For example, GnuPG does the same. GnuPG uses a library called libassuan that marshals queries and results between consumers and manufacturers.
I would not worry too much about performance issues between the client and the server in the model outside the process. Windows panels, Unix channels, and Unix domain sockets are quickly lit. In addition, it looks a lot like Dr. Jon Bentley said: If itβs not necessary, I can do it as quickly as you would like.
source share