<div dir="ltr"><div><div>Hi, in previous threads, there have been discussions about enabling FIPS, and the problems we are hitting with md5 inside OpenStack: <a href="http://lists.openstack.org/pipermail/openstack-dev/2016-November/107035.html">http://lists.openstack.org/pipermail/openstack-dev/2016-November/107035.html</a><br><br></div>It is important from a security perspective to enable FIPS, however OpenStack cannot boot with that, because of the existence of md5 calls in several projects. These calls are not used for security, just for hash generation, but even with that, FIPS is blocking them.<br><br></div><div>There is a patch proposed for newest versions of python, to avoid that problem. The idea is that when a hash method is called, users could specify if these are used for security or not. If the useforsecurity flag is set to False, FIPS won't block the call. See: <a href="http://bugs.python.org/issue9216">http://bugs.python.org/issue9216</a><br><br></div><div>This won't land until next versions of Python, however the patch is already on place for current RHEL and CentOS versions that are used in OpenStack deploys. Using that patch as a base, I have a proposal to allow FIPS enabling, at least in the distros that support it.<br><br></div><div>The idea is to create a wrapper around md5, something like:<br>md5_wrapper('string_to_hash', useforsecurity=False)<br><br>This method will check the signature of hashlib.md5, and see if that's offering the useforsecurity parameter. If that's offered, it will pass the given parameter from the wrapper. If not, we will just call md5('string_to_hash') .<br><br>This gives us the possibility to whitelist all the md5 calls, and enabling FIPS kernel booting without problems. It will start to work for distros supporting it, and it will be ready to use generally when the patch lands in python upstream and another distros adopt it. At some point, when all projects are using newest python versions, this wrapper could disappear and use md5 useforsecurity parameter natively.<br><br></div><div>The steps needed to achieve it are:<br></div><div>- create a wrapper, place it on some existing project or create a new fips one<br></div><div>- search and replace all md5 calls used in OpenStack core projects , to use that new wrapper. Note that all the md5 calls will be whitelisted by default. We have not noted any md5 call that is used for security, but if that exists, it shall be better to use another algorithms, in terms of security.<br><br></div><div>What do people think about it?<br><br></div><div>Best<br></div><div><div><div><br>-- <br><div class="gmail_signature"><div dir="ltr"><div>Yolanda Robla Mota<br></div><div>NFV Partner Engineer<br></div><a href="mailto:yroblamo@redhat.com" target="_blank">yroblamo@redhat.com</a><br>+34 605641639<br></div></div>
</div></div></div></div>