From: Randy Lawrence Date: 2004-07-10T04:03:54+09:00 Subject: Re: Secure Database Systems Sarah Tanembaum wrote: > I was wondering if it is possible to create a secure database system > using RDBMS(MySQL, Oracle, SQL*Server, PostgreSQL etc) and web > scripting/programming language(Perl, PHP, Ruby, Java, ASP, etc) combination? > > I have the following in mind: > > I wanted to store all my( and my brothers and sisters) important > document > information such as birth certificate, SSN, passport number, travel > documents, insurance(car, home, etc) document, and other important > documents > imagined in the database. > > The data will be entered either manually and/or scanned(with OCR). I > need to > be able to search on all the fields in the database. > > We have 10 computers(5bros, 4sisters, and myself) plus 1 server with I > maintained. The data should be synchronize/replicate between those > computers. > > Well, so far it is easy, isn't it? > > Here's my question: > > a) How can I make sure that it secure so only authorized person can > modify/add/delete the information? Beside transaction logs, are there > any > other method to trace any transaction(kind of paper trail)? > > Assuming there are 3 step process to one enter the info e.g: > - One who enter the info (me) > - One who verify the info(the owner of info) > - One who verify and then commit the change! > How can I implement such a process in RDBMS and/or PHP or any other web > language? > > b) How can I make sure that no one can tap the info while we are > entering > the data in the computer? (our family are scattered within US and > Canada) > > c) Is it possible to securely synchronize/replicate between our > computers > using VPN? Does RDBMS has this functionality by default? > > d) Other secure method that I have not yet mentioned. > > Anyone has good ideas on how to implement such a systems? > > Thanks > > > Some suggestions: 1. Use 2-factor authentication. So if a password gets stolen, it isn't enough by itself to access data. 2. Use 128-bit encryption for storage using secure algorithm (blowfish, twofish or AES. 3. Use 128-bit encryption for communication. 4. Use secure key exchange protocols. 5. Use secure key generation algorithm. 6. Use digital signatures and public-key encryption where appropriate. Client should authenticate server and server should authenticate client to eliminate man-in-the-middle attacks. 7. Take a look at Groove.net products to see how they designed their secure p2p shared-workspace applications. 8. Use firewalls to restrict access to communication ports based on IP addresses or range of addresses or ip countries. Why allow access from Chinese or Russian IP addresses if all your family members are in USA? ;) IMHO, the openssl interface in Ruby 1.8.1-snapshot makes this fairly easy to do compared to other scripting languages.