Slashdot Mirror


Secure Private Key Storage for UNIX?

An anonymous reader asks: "Microsoft Windows, from 2000 forward (except ME) offers secure certificate and private storage at the OS level in what is called a protected store. Offline, it's encrypted by a combination of the user's password and a session key stored on the filesystem. When the OS is running, the private keys stored are available to the logged in user, optionally encrypted with another password. The keys are stored in protected memory, so no applications can access them without going through the Microsoft CAPI calls. This code also is FIPS 140-1 level 1 (the best one can get for software cryptography modules) compliant." Does any other OS provide this kind of feature at the OS-level? If so, who? If not, why? This functionality (especially certified FIPS 140-1 or FIPS 140-2) would be nice to see in UNIX variants. MacOS's key-chain functionality is similar, but stores at the application level, and is not FIPS compliant. An implementation of the protected store functionality will allow applications like Firefox, Thunderbird and gpg to have one common place to obtain private keys and certificates rather than maintaining their own individual key-stores. An additional application for this would be the ability to use hardware PKCS #11 tokens.

I am wondering why this functionality does not exist at the OS level in most OSes except Windows. A number of applications on many platforms have this functionality, but its at the app level, with their own key-stores, and not a standard at the OS level."

25 of 95 comments (clear)

  1. Well duh.. by QuantumG · · Score: 3, Insightful

    on Windows it is centralized and conforms to government requirements because, get this, Windows development is centralized, and Microsoft sell Windows to governments. Amazing huh? Now, of course, if you think this is important, and can code, you might feel like going and writing a daemon for handing out certificates. Hardening it against attack, etc. Then go write the support into all these various programs that use certificates. But unless you're willing to do that, we'll just have to wait until Red Hat, Novell, or whoever go for some government contracts that require this level of certification.

    --
    How we know is more important than what we know.
    1. Re:Well duh.. by RollingThunder · · Score: 2, Informative

      I'm pretty sure that Sun, IBM, and HP sell their UNIX systems to the government, and centrally develop those too.

      He didn't specify Linux, he said UNIX.

    2. Re:Well duh.. by tritab · · Score: 2, Interesting

      Wow, this is the closest I've seen to anyone on Slashdot admitting that Microsoft did something better than any Unix / Linux system in a long time!

      But seriously, I've wondered about the same question as the OP and have never found anything good. The closest was setting file system permissions on the key file as someone else mentioned.

      Is it not possible?

    3. Re:Well duh.. by Anonymous Coward · · Score: 2, Insightful

      Um, dude... Your post was 100% "immature asshole."

      You may be correct in your facts, but that's immaterial when you stoop to personal attacks and condescending attitude. A mature response would include correcting facts with cited sources.

    4. Re:Well duh.. by jimstapleton · · Score: 2, Informative

      So, is this just a hallucination?

      HP has 3 (4?) flavors of UNIX:
      http://welcome.hp.com/country/us/en/prodserv/serve rs.html
      HP-UX, Linux, Tru64

      They also have UnixWare, though I'm not sure if that's UNIX or an application suite for UNIX, or something that is "kinda like but not really" UNIX.

      VMS is not UNIX, so I won't count that.

      Given that these are "for sale", I don't think "dead" is quite the appropriate term.
      You can drop out Linux since it's not a IBM creation, reducing their number of Unix OSes by 1, but that's still a positive number.

      We use all of the above (except UnixWare) and many more where I work, in various places (LARGE organization).

      As for IBM, AIX and Linux. I5 might be a Unix OS also, but I'm not familiar with it.
      http://www-03.ibm.com/systems/i/os/

      Also for sale. And AIX is also still used (they have AIX server in various places in the organization where I work also)

      --
      34486853790
      Connection too slow for X forwarding? Try "ssh -CX user@host"
    5. Re:Well duh.. by linkages · · Score: 2, Interesting

      If only AIX's memory management was as good as its logical volume manager. mmap on AIX is just broken when it comes to performance.
      If you have more that say a dozen processes mmaping a file and one of those procs makes a change all the others _MUST_ be interrupted to have their in proc. memory cleaned up. This becomes an even larger problem when you have hundreds of procs mmaping the same file.

  2. OS X Keychain is not "application level" by Anonymous Coward · · Score: 5, Informative

    On OS X, the keychain data (certificates, keys, etc) is not managed at the application level. There is a system daemon, securityd, that applications talk to if they need passwords or need data signed / decrypted or if they need credentials for a particular service.

  3. Keychain is at the application level? by dgatwood · · Score: 3, Informative

    I'm not sure what they're trying to claim here, but unless their definition of OS means "kernel", the Mac OS X (and classic Mac OS, AFAIK) keychain most certainly is an OS-level service. Keychain items can be shared among all applications, though most applications limit access to these items to a list of trusted applications for obvious security reasons.

    I don't know about the question of protected memory or FIPS certification, but the rest of this question just seemed like FUD to me.

    --

    Check out my sci-fi/humor trilogy at PatriotsBooks.

  4. chmod 600 by Anonymous Coward · · Score: 2, Informative

    chmod 600 crypt.key

    Just make sure to store the key encrypted with a passphrase :)

  5. FIPS Levels by Jherek+Carnelian · · Score: 3, Insightful

    This code also is FIPS 140-1 level 1 (the best one can get for software cryptography modules) compliant."

    That's odd, OpenSSL was just certified to level 2 (FIPS 140-2).
  6. Eggs and baskets by El+Cubano · · Score: 4, Insightful

    An implementation of the protected store functionality will allow applications like Firefox, Thunderbird and gpg to have one common place to obtain private keys and certificates rather than maintaining their own individual key-stores.

    Maybe it's just me, but I think that putting all your eggs in one basket is not smart. All it would take would be on critical vulnerability to be discovered and all of a sudden a potential attacker can get to all of your keys. Not good if you ask me.

    1. Re:Eggs and baskets by Just+Some+Guy · · Score: 5, Informative

      Maybe it's just me, but I think that putting all your eggs in one basket is not smart. All it would take would be on critical vulnerability to be discovered and all of a sudden a potential attacker can get to all of your keys. Not good if you ask me.

      I disagree. Right now, we're putting all our eggs in a bunch of half-assed baskets woven from tissue paper and lunchmeat. I'd much rather trust one well-audited, well-engineered solution than the 100 home rolled ones we have to trust now.

      KDE does this now with KWallet (although without the spiffy kernel-level protections the author claims that Windows supports). If I'm writing a KDE application, I don't have to worry about getting password storage right - some other folks who know a whole lot more about the problem have already taken care of it for me.

      I think this is good in the same way that using libc's strncmp is better than writing your own. Sure, there might be some undiscovered flaw lurking that's just waiting to open our systems to the world, and an environment of heterogeneous strncmp implementations would keep a successful attack from owning everything that links to libc. And yet, I have a lot of faith that the libc version is much better than anything I'm likely to come up with on my own.

      Finally, if an error in strncmp were to be discovered, an upgrade of one library file would fix every dynamically linked program on my system. If each of those programs used their own, then each one would have to be audited to make sure they weren't broken in a similar way. In the same way, an upgrade to KWallet helps every program that uses it. Other programs have to hope that new vulnerabilities are specific to KWallet's own code and not a more general problem.

      The Unix way is to build a tool that does one thing supremely well, then trust it. I think this is a prime candidate for the same treatment.

      By the way, I'm only using KWallet as an example because I'm familiar with it; I'd be even more interested in Theo de Raadt getting a wild hair and writing OpenSecureStore some weekend.

      --
      Dewey, what part of this looks like authorities should be involved?
  7. Much like KDE's kwalletmanager by Straker+Skunk · · Score: 4, Informative

    Same idea in KDE, and I'm sure GNOME has a similar mechanism. Whether these are "OS-level" or "application-level" is a subtler question, but this has more to do with the situation that Linux desktop systems don't necessarily have a centrally-planned infrastructure in the manner of Windows or MacOS X, rather than that they haven't addressed this problem at all.

    --
    iSKUNK!
  8. No by John.P.Jones · · Score: 4, Informative

    OpenSSL was just certified FIPS 140-2, that is NOT however level 2 it is version 2 of the standard. It was certified FIPS 140-2 level 1.

  9. Linux Kernel keyring; openCryptoki by omnirealm · · Score: 5, Informative

    Current versions of the Linux kernel have a key retention feature. For PKCS#11, there is openCryptoki.

    --
    An unjust law is no law at all. - St. Augustine
    1. Re:Linux Kernel keyring; openCryptoki by tlhIngan · · Score: 4, Interesting

      Any idea if that mechanism addresses the DRAM "memory" effect described in this paper: http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_ del.html?


      Having developed for embedded systems, I'm amazed at how well DRAM can retain data. I've had it such that RAM disks were preserved after power cycles (~1 second without power, and SDRAM controllers not initialized until many milliseconds after powerup). There was at one point a hack we had to implement in the bootloader to clear a bit of memory so a power cycle really would start clean.

      Heck, it's a great way when debugging - the OS could log all messages to the screen, but that greatly slows down operations. So we log into a circular RAM buffer. When the board crashes, we power cycle, then inspect the RAM buffer for the last few messages written.

      Out of curiousity, I once experimented to see how long the data was retained - I wrote a data pattern to RAM, looked at it back, then removed power for varying lengths of time. It can take anywhere from a few seconds to a minute before the data gets hopelessly corrupted. But before then, if you knew what you were looking for, you could find it.
  10. Re:Protected memory by Goaway · · Score: 2, Funny

    Yes, when there is no actual Microsoft vulnerability available, the crafty Slashdotter can just imagine that one exists, and still get that refershing feeling of superiority!

  11. Re:Protected memory by Harik · · Score: 3, Interesting

    Er, Lots of stuff lives in ring0, and any vulnerability in ANY of it removes your "protected memory".

    You can play games with hypervisors (can protect memory even from 'ring 0') or treacherous computing chips, or things like USB keystores with biometric authentication. But on vanilla 80386 machines, the best you're going to get is the OS to memlock() a few pages so they can't get swapped out to disk.

  12. Lack of central planning is the problem here by tepples · · Score: 2, Insightful

    this has more to do with the situation that Linux desktop systems don't necessarily have a centrally-planned infrastructure in the manner of Windows or MacOS X, rather than that they haven't addressed this problem at all. This lack of a centrally-planned infrastructure is exactly the problem in this case. Some developers, especially government contractors, want assurance of the quality of code, and their idea of assurance is papers stating that a corporation has put money into improving and certifying a given solution to a given government-approved standard.
  13. Re:Smart Card by mr_death · · Score: 2, Interesting

    At the RSA conference three years ago, you could bring your smart card to many booths and they would extract the private key in less than 5 minutes. I have no reason to believe that the problem has become any harder.

    True, a smart card (compared to a normal PC) sucks less, but it still sucks.

    --
    It's Linux, damnit! Pay no attention to renaming attempts by self-aggrandizing blowhards.
  14. I think we did this first... by SanityInAnarchy · · Score: 2, Insightful

    ... but what's magical about the "OS level"? According to Microsoft, Internet Explorer is part of the OS, so anything they say about "OS level" is really irrelevant.

    Offline, it's encrypted by a combination of the user's password and a session key stored on the filesystem.

    We've been mounting home directories on encrypted filesystems for decades, so that's one way to do this. OS X has this built in and very easy to enable.

    When the OS is running, the private keys stored are available to the logged in user, optionally encrypted with another password.

    Which is pretty much how we do this already; just read the file. If the user had a passphrase, use that to decrypt it.

    The keys are stored in protected memory, so no applications can access them without going through the Microsoft CAPI calls.

    Well, on Unix, no application can access any other application's memory, period. End of story.

    There are ways around this -- you could do tricks with kernel memory, or you could read it off the swapfile. However, I believe there is a way to request that a specific chunk of memory never be swapped out, and while it's in RAM, if your kernel's safe, your app is safe. And it's always possible to run without swap, or encrypt your swap.

    On Windows, I believe you can "attach" to a running process with a debugger. On Unix, if you want to debug, you have to start the app in a debugger, because once it's running, the app's memory is its own. Only way you can "attach" then is if the app specifically has a way to do that -- for instance, browser plugins are essentially an app deliberately loading code from somewhere else into itself and running it. But if an app doesn't go out of its way to let you in, you aren't getting in, and if your kernel is owned, so are you, even on Windows.

    MacOS's key-chain functionality is similar, but stores at the application level, and is not FIPS compliant.

    What does FIPS compliance mean?

    And once again, "application level" is a pointless distinction. Yes, there are mechanisms for storing keys at the kernel level, but in my mind, that's less secure because it's much more complex for no good reason.

    An implementation of the protected store functionality will allow applications like Firefox, Thunderbird and gpg to have one common place to obtain private keys and certificates rather than maintaining their own individual key-stores.

    So have them all use libgpg or something. But what is the advantage?

    In Thunderbird, I have a PGP key that I sign my mail with, and I have a password that I use to connect to the server. In Firefox, I have an entirely different set of passwords, and the public keys to some Certificate Authorities. Firefox needs none of the Thunderbird keys/passwords, and vice versa. On the commandline, I have an ssh key, which I use to shell in to other boxes -- which is a key that I don't use in Firefox or Thunderbird.

    What's the advantage of putting these all in the same app? And what's the advantage of that app being "OS level"?

    Ultimately, the only advantage I see is with something like OpenID. It'd be nice if I could use the same keys I use with ssh to gain access to my OpenID server. Unfortunately, I haven't managed to get my hands on a working server implementation of OpenID, so that's moot.

    --
    Don't thank God, thank a doctor!
    1. Re:I think we did this first... by Anonymous Coward · · Score: 3, Informative

      On Windows, I believe you can "attach" to a running process with a debugger. On Unix, if you want to debug, you have to start the app in a debugger, because once it's running, the app's memory is its own. Only way you can "attach" then is if the app specifically has a way to do that -- for instance, browser plugins are essentially an app deliberately loading
      code from somewhere else into itself and running it. But if an app doesn't go out of its way to let you in, you aren't getting in, and if your kernel is owned, so are you, even on Windows. huh?

      what about
        strace -p pid
        gdb program pid
  15. Re:Loopback filesystems? by ThePhilips · · Score: 2, Insightful

    People who need such protection all encrypt whole file system and do not bother with only password/key storage. Linux/UNIX does that for all time I know (Crypto Loop patches is probably oldest patch set for Linux). Windows/Vista I heard can this now. MacOS X allows only to encrypt user home directory what is sufficient in most situations - since keys belonging to user are always saved in user's home directory.

    That protection was needed by Windows XP and earlier since it didn't supported FS encryption. And even then people were selling special solutions with transparent hard drive encryption: BIOS asks for password and gives it to the hard drive and Windows goes on booting as usual.

    --
    All hope abandon ye who enter here.
  16. Plan 9's Factotum by Darren+Bane · · Score: 2, Interesting

    Plan 9 has such a central key repository. It's called Factotum, and the best description is the USENIX paper. It has been ported to other UNIX-likes by the plan9port project.

    --
    Darren Bane
  17. Attaching debugger to running process in Linux by Hannes+Eriksson · · Score: 3, Informative

    SanityInAnarchy has apparently not been doing a lot of development in a UNIX environment. While I don't blame him/her for potentially missing out on the ptrace syscall, as it's not mentioned in Stevens' Advanced Programming in the UNIX Environment, I do find it a bit sad that he/she makes such bold statements about the security of a computer system without checking at least the valid command line parameters to one of the tools he is referring to. Luckily an Anonymous Coward already told the world about two of these.

    For those not familiar with the ptrace syscall, here is some info about linux ptrace:

    • You have to have super-user privileges, CAP_SYS_PTRACE capabilities or be able to send signals to the process to "attach to". The first parts means you is or have the permission of the system administrator or compromised the system. The last part basically means that you can also poke around at will in "your own" (or all processes for the same user account you've hacked) processes.
    • It is possible to read and write all process memory and registers. Basically, this means that you can run, you can obfuscate, but you cannot hide your crypto keys. Not from yourself or a particularly Evil sysadm, that is.
    • Even if the traced process receives a signal from the tracing, it is already too late to do anything about it once it regains control over it's operation.

    Detecting that you're being traced is possible, but it equally possible to circumvent possible detection by tracing at the correct time, deliver spoofed signals, modifying memory in the traced process to avoid being detected. In short: if you cannot trust your system administrator and yourself (at least all processes running as you) you are out of luck as to local security. Network security is one step worse, in that you have to trust even more persons.

    Oh, and don't use trustno1 as password!

    --
    Geek rants since like... 2000 or something.