Karim Belabas on Mon, 10 Sep 2012 16:48:52 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: Cleaning the pari-stack |
* Manolo [2012-09-10 16:20]: > I'm using pari-gp for building a small crypto-app. Even if it is a toy > project, I want to do the things in the right way. > > One big concern in cryptography is to wipe any sensitive material from > memory as fast as possible, in particular, the stack should be cleaned > often. Beware that an even greater concern is to use strong pseudo-random number generators. (Ours, based on Brent's XORGEN, are definitely not suitable for key or nonce generation.) > In pari-gp, we have the normal stack and the pari-stack. About this > last one, we know how to free pari-objects via "gerepile"-family > functions; but if these objects contain sensitive material, this is > not zeroed; the memory is free to be reused, but it is not wiped and > the sensitive material could some way be leaked off (perhaps due to a > core dump?). > > So, I think a possible solution is to call a burn_paristack() function > every time a critical calculation is done. For example: > > void burn_paristack() > { > pari_sp ltop = avma, st_lim = stack_lim(ltop, 1); > size_t st_size = (ltop - st_lim)*sizeof(pari_sp); > char *dump; > > dump = stackmalloc(st_size); > bzero(dump, st_size); > avma = ltop; > } > > This way, calling to burn_paristack() zeroes half of the available > room in the stack, wiping the information held by the last used > objects. > > Did I argue well? Did I miss something? May this scheme be optimized? I'd use simply void burn_paristack() { bzero((void*)bot, avma - bot); } (untested:-) to simply clear up the unused part of the stack. In fact, we already provide the analogous void fill_stack(void) { GEN x = ((GEN)bot); while (x < (GEN)avma) *x++ = 0xfefefefeUL; } whose purpose is not to wipe out information but to help debugging memory corruptions (we can then hunt for the unlikely 0xfefefefe pattern in existing objects). Cheers, K.B. -- Karim Belabas, IMB (UMR 5251) Tel: (+33) (0)5 40 00 26 17 Universite Bordeaux 1 Fax: (+33) (0)5 40 00 69 50 351, cours de la Liberation http://www.math.u-bordeaux1.fr/~belabas/ F-33405 Talence (France) http://pari.math.u-bordeaux1.fr/ [PARI/GP] `