{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Counter-Based Random Number Generation" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from Crypto.Cipher import AES\n", "import os\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#secret = os.urandom(BLOCK_SIZE)\n", "secret = np.array([23842839,234234,2342314,2342342], dtype=np.uint32)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "counter = np.array([1,0,0,0], dtype=np.uint32)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": true }, "outputs": [], "source": [ "aes = AES.new(secret)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "b'0\\xa8\\xa9N\\xad\\x8d_gIC\\x0fb\\xb0E\\xa34'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aes.encrypt(counter)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "b'0\\xa8\\xa9N\\xad\\x8d_gIC\\x0fb\\xb0E\\xa34'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aes.encrypt(counter)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([3145698134, 4097296222, 1305499519, 1043286573], dtype=uint32)" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.fromstring(aes.encrypt(counter), dtype=np.uint32)\n", "counter[0] += 1\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Batched Random Number Generation" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [], "source": [ "counters = np.zeros((100000, 4), dtype=np.uint32)\n", "counters[:, 0] = np.arange(len(counters))" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "numbers = np.fromstring(aes.encrypt(counters), dtype=np.uint32).reshape(-1)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(array([ 40000., 39778., 40012., 40060., 40176., 40116., 39876.,\n", " 40196., 39793., 39993.]),\n", " array([ 3.20370000e+04, 4.29525053e+08, 8.59018069e+08,\n", " 1.28851109e+09, 1.71800410e+09, 2.14749712e+09,\n", " 2.57699013e+09, 3.00648315e+09, 3.43597617e+09,\n", " 3.86546918e+09, 4.29496220e+09]),\n", " )" ] }, "execution_count": 45, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(numbers)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* How would you convert that to real numbers between 0 and 1?" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2+" } }, "nbformat": 4, "nbformat_minor": 1 }