{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Grover search: hash function preimage attack\n", "\n", "In the ever-evolving landscape of cybersecurity, the advent of quantum computing presents both an extraordinary opportunity and an unprecedented challenge. In this notebook we exploit a Grover Search to perform a preimage attack on a toy hash function.\n", "\n", "A preimage attack on a cryptographic hash function `h(m)` tries to find a message `m` that has a specific hash value. Using qlasskit it is easy to write an hash function like the following `hash_simp`:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from qlasskit import qlassf, Qint, Qint8, Qlist\n", "\n", "\n", "@qlassf\n", "def hash_simp(m: Qlist[Qint[4], 2]) -> Qint[8]:\n", " hv = 0\n", " for i in m:\n", " hv = ((hv << 4) ^ (hv >> 1) ^ i) & 0xFF\n", "\n", " return hv" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Thanks to the fact that qlasskit function are standard python functions, we can call the `original_f` to perform some kind of analysis on the hash function. Since the input space is tiny (it is a toy hash function), we can detect if the hash function is uniform (if it maps equally to the output space)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hash function output space: 256\n" ] } ], "source": [ "from collections import Counter\n", "\n", "d = Counter(hex(hash_simp.original_f((x, y))) for x in range(2**4) for y in range(2**4))\n", "\n", "print(\"Hash function output space:\", len(d))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We got that `hash_simp` is following an uniform distribution. \n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "hash_simp.export(\"qiskit\").draw(\"mpl\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Now we use our quantum function as an oracle for a Grover search, in order to find which input maps to the value `0xca`." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "from qlasskit.algorithms import Grover\n", "\n", "q_algo = Grover(hash_simp, Qint8(0xCA))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Then we use our prefered framework and simulator for sampling the result; this is an example using `qiskit` with `aer_simulator`." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAHtCAYAAABlFmhpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABXnklEQVR4nO3dd3gU1eL/8c+kEpKQQAiXFqqBSBMQRAFBEBIBLxawK0URG2IvqLSLoIL1XttVEEVFQVGv+qVJlyZYAogIiUgH6QlJIGw5vz/47cqSBJJAstnJ+/U8PI85c3Zzztnj5LMzZ2YsY4wRAAAAbCXI3w0AAADAuUfIAwAAsCFCHgAAgA0R8gAAAGyIkAcAAGBDhDwAAAAbIuQBAADYUIi/GxDo3G63du3apejoaFmW5e/mAAAAmzPG6MiRI6pZs6aCggo+XkfIO0u7du1SQkKCv5sBAADKme3bt6t27doFbifknaXo6GhJJwa6UqVKfm4NAACwu8zMTCUkJHgzSEEIeWfJc4q2UqVKhDwAAFBqzrRMjAsvAAAAbIiQBwAAYEOEPAAAABsi5AEos0aNGiXLsnz+JSUlSZK2bNmSZ5vn32effeZ9j9WrV+vyyy9XbGysKleurJSUFK1Zs8ZfXQKAUkPIA1CmNW3aVLt37/b+W7p0qSQpISHBp3z37t0aPXq0oqKi1KNHD0lSVlaWrrjiCtWpU0c//PCDli5dqujoaKWkpMjhcPizWwBQ4ri6FkCZFhISourVq+cpDw4OzlP+5Zdf6vrrr1dUVJQk6ffff9fBgwf1r3/9y3s/y5EjR6pFixbaunWrzjvvvJLvAAD4CUfyAJRpaWlpqlmzpho0aKBbbrlF27Zty7feTz/9pNTUVN1xxx3essaNGysuLk6TJk3S8ePHdfToUU2aNEnnn3++6tWrV0o9AAD/IOQBKLPatWun999/X7Nnz9Zbb72lP//8U5deeqmOHDmSp64nvLVv395bFh0drUWLFumjjz5SRESEoqKiNHv2bM2aNUshIZzIAGBvhDwAZVaPHj103XXXqUWLFkpJSdHMmTN1+PBhTZ8+3afe0aNHNXXqVJ+jeJ7yO+64Qx06dNDKlSu1bNkyNWvWTL169dLRo0dLsysAUOr4KgsgYMTGxqpRo0ZKT0/3Kf/888+Vk5Ojfv36+ZRPnTpVW7Zs0YoVK7wP8Z46daoqV66s//3vf7rxxhtLre0AUNo4kgcgYGRlZemPP/5QjRo1fMonTZqk3r17Kz4+3qc8JydHQUFBPo/+8fzsdrtLpc0A4C+EPABl1qOPPqrFixdry5YtWr58ua655hoFBwfrpptu8tZJT0/XkiVLNGjQoDyv7969uw4dOqT77rtPGzZs0Pr16zVw4ECFhISoS5cupdkVACh1hDwAZdaOHTt00003qXHjxrr++usVFxenlStX+hyxe++991S7dm0lJyfneX1SUpK++eYbrV27VpdccokuvfRS7dq1S7Nnz85zNBAA7MYyxhh/N6IgX375pd588039/PPPys7OVo0aNXTxxRdr/Pjx3nteSVJmZqZGjRqlGTNmaM+ePapRo4auu+46jRw50nu/rJO53W698cYbeuedd5Senq6oqCh169ZNY8eOVYMGDYrUxszMTMXExCgjI0OVKlU66z4DAACcTmGzR5kMecYY3X333XrnnXfUsGFDpaSkKDo6Wrt27dLixYv18ccfq2PHjpKk7OxsdezYUampqUpOTlarVq30yy+/aO7cuWrbtq2WLFmiChUq+Lz/nXfeqYkTJ6pp06bq1auXdu3apenTpysqKkorV65UYmJiodtKyAMAAKWp0NnDlEGvvvqqkWTuvfde43Q682x3OBze/x4xYoSRZJ544gmfOk888YSRZMaNG+dTvmDBAiPJdOrUyeTm5nrLZ86caSSZ5OTkIrU1IyPDSDIZGRlFeh0AAEBxFDZ7lLkjeUePHlWtWrVUuXJlbdy48bQ3LDXGqHbt2srMzNSePXsUGRnp3Zadna3q1aurWrVq+uOPP7zlN998sz755BMtXrxYnTp18nm/Ll26aNGiRdq6davq1KlTqPZyJA8AAJSmwmaPMnfhxdy5c3Xo0CFdffXVcrlc+uKLL/T888/r7bffznNvrLS0NO3atUsdOnTwCXiSFBkZqQ4dOmjz5s3avn27t3zRokXebadKSUmRJC1evLgEegYAAFB6ytzNkH/66SdJJx4+3qJFC23atMm7LSgoSA899JBefPFFSSdCnqQC19AlJiZqzpw5SktLU0JCgrKzs7V79241a9ZMwcHB+dY/+X3zk5ubq9zcXO/PmZmZkiSHwyGHw+FtZ3BwsFwul8+9uDzlTqdTJx9ADQ4OVlBQUIHlnvf18BzddDqdhSoPDQ2V2+2W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tWjRQpJ09OhRff/993rvvfcUEhKimJgYXXTRRerWrZtq1arlXcZhu6UcBrbhdDpN06ZNTbVq1cz48ePN999/b6ZOnWpeeeUV079/f9OwYUMTFBRkGjRoYF588UXv69xutx9bHXhcLpfp3r27CQ0NNcnJyWbUqFHmn//8pwkKCjKdOnUyu3fv9ncTgSJxuVymbt265rLLLjNZWVnGGGO2bNliqlatagYNGmRuv/12ExQUZCzLMpZlmYsvvtgsX77cz60OLC6XyxhjzO23324syzLBwcHGsizTsmVLM378ePPHH39462ZmZpq2bduar7/+2hhzYh/teb0xJ/b1yJ/T6TShoaHm/vvvN9nZ2d7yu+++20RERBjLskxUVJQJCgoykZGR5q677jIZGRk+72Gnv4mEPBvwTMgPP/zQhIWFmYkTJ+apc+DAAbN69WozYcIE06pVK2NZlunRo4fZt2+fz/vYaXKfa56x+fjjj41lWeaJJ57wbjt8+LC5++67jWVZZsKECXles23bNrN+/XpjDDtolB0nz+nQ0FDz8ccf+2xv27atCQsLM127djVvv/22mTdvnnnkkUeMZVmmTZs2ZufOnf5odkAbNmyYsSzLXHnllaZnz57e4GFZlunatav56quvzLhx44xlWd59OfuMM/PM5ffff98EBQWZadOmGWOMOX78uJk8ebKxLMu0b9/efPXVV2bJkiXmyy+/NFdeeaWxLMvcdddd5tixY/5sfokh5NmAZ3L369fPJCQkmI0bNxpjTkzuU0Obw+Ewq1evNldffbWxLMs8/vjjpd7eQOX5Jt29e3fTrl07s2HDBmPM3zvggwcPmg4dOpjKlSv7hGdjjHnxxRdNUFCQ2bx5c+k2GjgNz5y+/vrrTfPmzb1fRIwxZuPGjaZVq1bmggsuMDt27PCWHzp0yPTt29dYlmVWrVpV6m0OdMeOHTM333yz6dWrl8nJyTGrVq0yTz/9tLnooou8R0tDQkJMXFyceffdd/3d3IDhmcuXXnqpufjii7374PXr15vWrVubSy65JM+XkjVr1pjzzz/fVKxY0WzZsqXU21waWKRiA5ZlyeVyqUqVKsrIyPApP3V9QUhIiNq0aaPPP/9cnTt31scff6zs7OzSbnJACgoKUkZGhv7880+df/75Ou+88ySduALO7XarcuXKeuihh3T48GG999573tft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", "text/plain": [ "
" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from qiskit import QuantumCircuit, transpile\n", "from qiskit.visualization import plot_histogram\n", "from qiskit_aer import AerSimulator\n", "\n", "qc = q_algo.export(\"qiskit\")\n", "qc.measure_all()\n", "simulator = AerSimulator()\n", "circ = transpile(qc, simulator)\n", "result = simulator.run(circ).result()\n", "counts = result.get_counts(circ)\n", "\n", "counts_readable = q_algo.decode_counts(counts, discard_lower=5)\n", "plot_histogram(counts_readable)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using `QlassF.original_f` we can double check the result without invoking a quantum simulator; calling it with the tuple `(12,12)` must result in the hash value `0xca`." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0xca\n" ] } ], "source": [ "print(hex(hash_simp.original_f((12, 12))))" ] } ], "metadata": { "kernelspec": { "display_name": "qlasskit_310-env", "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.10.13" } }, "nbformat": 4, "nbformat_minor": 2 }