{ "info": { "author": "Philippe Teuwen", "author_email": "phil@teuwen.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Topic :: Security :: Cryptography" ], "description": "## phoenixAES: a tool to perform differential fault analysis attacks (DFA) against AES\n\nCurrently phoenixAES contains the following ciphers and fault models:\n\n * simple DFA R9: \n AES 128 encryption or decryption \n At least 4*2 faults in round 9 (between the last two MixCols) \n Ref: https://eprint.iacr.org/2003/010 \n Current implementation discards automatically unexploitable outputs but may fail if more than one fault occur on the same column so be careful to record only outputs from single faulted implementations.\n * simple DFA R8: \n AES 128 encryption or decryption \n 2 single faults in round 8\n It simply converts the ciphertexts as if they were faulted in round 9 so the previous attack can be applied\n\nSee https://blog.quarkslab.com/differential-fault-analysis-on-white-box-aes-implementations.html for more background.\n\n## Installation\n\nThere is no dependencies, it requires only Python 3.\n\n```\npython3 -m pip install phoenixAES\n```\n\n## Usage\n\nIt takes a file of recorded outputs, optionally preceded by inputs (which will be ignored).\nFirst record must be with the correct output, to be used as reference. \nE.g. for AES:\n\n```python\n#!/usr/bin/env python3\nimport phoenixAES\n\nwith open('tracefile', 'wb') as t:\n t.write(\"\"\"\n74657374746573747465737474657374 BF9B06F11DF478145B8300FE440B0D06\n74657374746573747465737474657374 BF9BDDF11D527814568300FE440B0DFA\n74657374746573747465737474657374 BF9BF9F11DAC78145F8300FE440B0D67\n74657374746573747465737474657374 BF9BF0F11DBB78140C8300FE440B0DEE\n74657374746573747465737474657374 BF9BF9F11DAC78145F8300FE440B0D67\n74657374746573747465737474657374 BF9B69F11DBD7814E68300FE440B0DAE\n74657374746573747465737474657374 BF9BF0F11DBB78140C8300FE440B0DEE\n74657374746573747465737474657374 BF9B90F11D4178149D8300FE440B0DE2\n74657374746573747465737474657374 BF9BCFF11D0478140E8300FE440B0D28\n74657374746573747465737474657374 FD9B06F11DF478E15B831AFE44C40D06\n74657374746573747465737474657374 BA9B06F11DF4787B5B83E8FE44020D06\n74657374746573747465737474657374 579B06F11DF478565B8364FE446F0D06\n74657374746573747465737474657374 579B06F11DF478565B8364FE446F0D06\n74657374746573747465737474657374 BF9B065C1DF4B6145B1800FE9E0B0D06\n74657374746573747465737474657374 BF9B065C1DF4B6145B1800FE9E0B0D06\n74657374746573747465737474657374 BF9B06251DF454145BC200FE060B0D06\n74657374746573747465737474657374 BF9B06941DF4C3145BFB00FED20B0D06\n74657374746573747465737474657374 BF9B12F11D977814DD8300FE440B0D21\n74657374746573747465737474657374 BF9B90F11D4178149D8300FE440B0DE2\n74657374746573747465737474657374 BF9BCFF11D0478140E8300FE440B0D28\n74657374746573747465737474657374 BF9BDDF11D527814568300FE440B0DFA\n74657374746573747465737474657374 BFFB06F1E2F478145B8300AB440B7906\n74657374746573747465737474657374 BF5D06F142F478145B830049440B7306\n\"\"\".encode('utf8'))\n\nphoenixAES.crack_file('tracefile')\n```\n\nAfter ~50 ms:\n\n```\nLast round key #N found:\nD014F9A8C9EE2589E13F0CC8B6630CA6\n```\n\nFor two single faults in round 8:\n\n```python\n#!/usr/bin/env python3\nimport phoenixAES\n\nwith open(\"r8faults\", \"w\") as f:\n f.write(\"bf9b06f11df478145b8300fe440b0d06\\n\")\n f.write(\"fdfbf95ce2acb6e15f181aab9ec47967\\n\")\n f.write(\"ba5df02542bb547b0cc2e849060273ee\\n\")\nphoenixAES.convert_r8faults_file(\"r8faults\", \"r9faults\")\nphoenixAES.crack_file(\"r9faults\")\n```\n\nAfter ~50 ms:\n\n```\nLast round key #N found:\nD014F9A8C9EE2589E13F0CC8B6630CA6\n```\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/SideChannelMarvels/JeanGrey", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "phoenixAES", "package_url": "https://pypi.org/project/phoenixAES/", "platform": "", "project_url": "https://pypi.org/project/phoenixAES/", "project_urls": { "Homepage": "https://github.com/SideChannelMarvels/JeanGrey" }, "release_url": "https://pypi.org/project/phoenixAES/0.0.2/", "requires_dist": null, "requires_python": "", "summary": "tool to perform differential fault analysis attacks (DFA) against AES", "version": "0.0.2" }, "last_serial": 4483964, "releases": { "0.0.2": [ { "comment_text": "", "digests": { "md5": "850b0e8f178e7ca82e75b270b42a1c5e", "sha256": "66b50582784c39a8fb54bd960b74091cc9cfd3a39fc92fa2ceea41f4a7fb2f04" }, "downloads": -1, "filename": "phoenixAES-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "850b0e8f178e7ca82e75b270b42a1c5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23397, "upload_time": "2018-11-14T02:17:53", "url": "https://files.pythonhosted.org/packages/b1/83/828b76e81678d039b42c2e22223a46c67b5845e0add95bec192640b3567d/phoenixAES-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f6e3013f9a8cbe1a8df226905fd1487", "sha256": "5764c76f1b1f7408e6d65aabc9191922c976e9211c25b1349de3293e3be132b1" }, "downloads": -1, "filename": "phoenixAES-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9f6e3013f9a8cbe1a8df226905fd1487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11565, "upload_time": "2018-11-14T02:17:56", "url": "https://files.pythonhosted.org/packages/ab/cf/9e0e09963da82e2a6e0e858095e2932afc5f187ce58e659005dddf5aca8f/phoenixAES-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "850b0e8f178e7ca82e75b270b42a1c5e", "sha256": "66b50582784c39a8fb54bd960b74091cc9cfd3a39fc92fa2ceea41f4a7fb2f04" }, "downloads": -1, "filename": "phoenixAES-0.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "850b0e8f178e7ca82e75b270b42a1c5e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23397, "upload_time": "2018-11-14T02:17:53", "url": "https://files.pythonhosted.org/packages/b1/83/828b76e81678d039b42c2e22223a46c67b5845e0add95bec192640b3567d/phoenixAES-0.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f6e3013f9a8cbe1a8df226905fd1487", "sha256": "5764c76f1b1f7408e6d65aabc9191922c976e9211c25b1349de3293e3be132b1" }, "downloads": -1, "filename": "phoenixAES-0.0.2.tar.gz", "has_sig": false, "md5_digest": "9f6e3013f9a8cbe1a8df226905fd1487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11565, "upload_time": "2018-11-14T02:17:56", "url": "https://files.pythonhosted.org/packages/ab/cf/9e0e09963da82e2a6e0e858095e2932afc5f187ce58e659005dddf5aca8f/phoenixAES-0.0.2.tar.gz" } ] }