No GnuPG library for now (was: Feature Suggestion)
Russ Allbery
rra@stanford.edu
19 Oct 2000 13:32:27 -0700
Werner Koch <wk@gnupg.org> writes:
> * Shared libraries might be better but in the end it is still one
> program with not so well defined interfaces. Building programs
> based on shared libraries is causing a lot of headache - ever
> tried to build Mozilla or Evolution?
> * Unix was successul because of KISS (Keep it simple and small).
> All the small, quite well tested modules/programs/components do
> work (more or less) nicely together and we can develop and
> maintain small modules and modules which utilize other modules.
> It is far from perfect but a rock solid foundation for many
> tasks.
I'm not sure I'm completely following what you're saying, but there are
some real problems with the separate program approach in practice. A fork
consumes a lot of resources and can be difficult to manage well.
My experience in this area is with writing news servers, which currently
often use PGP to authenticate newsgroup control messages (create, remove,
etc.) by checking their signatures. We've found from hard experience that
forking off a control message handler for each incoming control message
makes the system extremely vulnerable to denial of service attacks.
INN, to take a concrete example, is a long-running server that tends to
allocate 50MB or more of memory for various memory caches, temporary
article storage, and the like, and in addition memory maps often upwards
of 500MB of databases. Forking an external handler on some systems means
reserving hundreds of MB of swap (which thankfully due to copy on write
aren't actually used, but the reservation process itself can be
expensive) and closing hundreds of open file descriptors that are marked
close on exec (and also invalidating all those memory maps, although one
would hope that was reasonably efficient). One also has to then manage
the forked process, reap it properly, and limit how frequently one is
willing to fork processes in order to keep from forking the system to
death.
For newsgroup control messages, you can deal with this by having INN fork,
when it starts, a separate handler process that just deals with newsgroup
control messages and forks the verification program and so forth. This
handler process is nice and small and can churn through requests handling
them one at a time. But that only works for things like newsgroup control
messages which INN accepts, hands off, and forgets about.
We'd like to expand the authentication features of Usenet to cover
moderated newsgroups as well, but trying to do this by forking an external
process for every post to a moderated newsgroup is going to basically be a
non-starter and this can't be handled using the method described above.
INN has to get back an accept or reject decision from the validator; it
can't just dispatch the message off to some handler and then forget about
it. It's possible that GnuPG is the wrong tool to even look at for doing
this and we should be using OpenSSL and a certificate system instead, but
I'd hate to disqualify GnuPG for non-crypto-based reasons. Some way of
verifying signatures via a library interface that does not involve a fork
would be *very* nice.
--
Russ Allbery (rra@stanford.edu) <http://www.eyrie.org/~eagle/>