Subject: Background on cryptosrc-intl proposal
To: None <tech-security@netbsd.org>
From: Michael C. Richardson <mcr@sandelman.ottawa.on.ca>
List: tech-security
Date: 06/22/1999 20:45:50
  I'd like to start a discussion on what to include in the initial 
cryptosrc-intl tree. This serves as background. It has been discussed
by netbsd-developers for some time.

$Id: netbsd-intl-plan,v 1.4 1999/06/22 23:38:44 mcr Exp mcr $

General Problem:
	NetBSD's source tree currently includes a subtree called "domestic"
	which contains code that can not leave the United States due to
	Cryptographic export restrictions.

	People not resident in the United States currently have no standard
	cryptographic facilities as part of their tree. While there is plenty
	of available code available outside of the US, it is not well
	integrated into the system, and so is hard to use, and hard to
	count upon. As the NetBSD source tree is currently hosted in
	the United States, it is not currently possible for non-US citizens
	to usefully contribute cryptographic code to the NetBSD tree
	as once it enters the US, it may not leave again.

Opportunity

	The NetBSD Foundation has secured a machine with disk space
	and sufficient internet bandwidth to function as a non-US CVS
	server. This is cvs.fi.netbsd.org. The machine was provided by
	SSH Communications Security Oy, and the bandwidth by HUT
	(Helsinki University of Technology). Finland has rather
	liberal export rules on cryptography, so while US citizens
	(and people resident in the US) are still forbidden to
	contribute cryptographic to this repository, then can at least
	import it, and the rest of us can freely contribute code.


Background Proposal
	All of the non-crypgraphic parts of the NetBSD CVS repository
	code will be mirrored and/or moved to cvs.fi.netbsd.org. The
	details of this are not covered in this document.

Cryptographic Proposal
	A new subtree of /usr/src will be created. It will be named
|	"crypto-intl". In the new source tree organization, it will
|	live in /cvsroot/cryptosrc-intl/crypto-intl.

	A new subtree is needed as citizens/residents of countries with
	export restrictions will not be able to contribute code 
	to this part of the tree. The distinction will help them avoid
	breaking their own (misguided) laws.

	Some comments about the name: while the opposite of "domestic"
	is "export", typically the "export" version of a US program is
	the version without cryptography. We are not trying to do
	that. Rather we are making a non-US version that has
	cryptography. Intl is short for "international"		

| 	It has been suggested that "intl" along may get confused with i18n
|	efforts to make NetBSD happy with multilingual character sets. Thus
|	the name change to "crypto-intl"

|	Subdirectories of "crypt-intl" will resemble those of domestic (I'm
	told. I've never officially seen it ;-} ), or "gnu", i.e. there will be:
		
|	/usr/src/crypto-intl/lib	- support libraries
|	/usr/src/crypto-intl/bin	- programs for /bin
|	/usr/src/crypto-intl/usr.bin	- programs for /usr/bin
|	/usr/src/crypto-intl/sbin	- programs for /sbin
|	/usr/src/crypto-intl/usr.sbin	- programs for /usr/sbin
|	/usr/src/crypto-intl/sys	- kernel code
|	/usr/src/crypto-intl/dist	- original archives
|	/usr/src/crypto-intl/libexec - daemons
|	/usr/src/crypto-intl/etc
|	/usr/src/crypto-intl/share/examples

	Where reasonable, the Makefile files will use the "reach-over"
	technique into the dist area where original packages source
	trees will be kept. E.g:
	/usr/src/crypto-intl/lib/libdes/Makefile might grab code from
		{../..,/usr/src/crypto-intl}/dist/openssl/libdes
	
	Kernel Code
|	The kernel "crypto-intl/sys" area will be a shadow of /usr/src/sys.
|	There will a /usr/src/crypto-intl/sys/conf/files that will include
	/usr/src/sys/conf/files etc. This will allow kernels to be
	build/configured/etc. that contain cryptography, but without
	duplicating or polluting any of /usr/src/sys which must remain
	exportable from the US. Modifications to config(9) may be required to
	deal with additional paths, or possible additional makefile
	sections. At this time, it is believed that no additional features
	will be needed. 

What to include, where to put it

	Quite a large number of cryptographic programs may be better
	suited for pkgsrc inclusion. Apache-SSL comes to mind here.
	There are however, several categories of programs that will
	need to go into crypto-intl: 

	1. anything intended to go into the kernel:
		-IPsec
		-cryptographic signing of user binaries/lkms
		-public key based capability based extensions (a la KeyOS)
		-cryptographic file systems (including network file systems
			i.e. AFS-like stuff) 
		-secure network booting code
		
	2. support programs for above
	3. base libraries/headers that we wish to distribute to make crypto
		ubiquitous: i.e. RSA, DSS, DH, CAST, 3DES
	4. code that enhanced from code we maintain (i.e. Kerberized
		/bin/login, telnet)
	5. original code from the NetBSD project

	#4 implies that we would like to have Kerberos version 4 and
		Kerberos version 5 included. It is hoped that the Heimdal
		project will eventually provide this base. We can
		argue about whether or not we should just leave this
		in pkgsrc. 

Timeline
	We will start using cvs.fi.netbsd.org as soon as this proposal 
	is approved.

	The 1.5-current snapshots will start to include a "crypto-intl"
	package.

	The "secr" package would be renamed "domestic" or "domt". 

	1.5 might ship with just the crypto-intl package for distributions
 	that are created outside of the US. This is open to debate. We may
	prefer to continue leaving crypto an optional part. 

Additional minor items
	1. create a new list "tech-crypto"

	2. while it isn't that cool, you can check out "src" from
	cvs.netbsd.org and then checkout "src/crypto-intl" from
	cvs.fi.netbsd.org. You need to be a bit careful about not running
	"cvs update" from the toplevel with CVS versions lower than
	1.10. 1.10 can cope with parts of the tree being on different servers.

	3. we need to make sure that all ports have a non-US builder to build
	the crypto-intl area. It isn't enough to have a non-US machine, but 
	the person typing "make" must not be a US citizen or a US resident.
	Herb's lab is in Calgary, so machines should be in the right place.