{ "info": { "author": "Gabriel A. Hackebeil", "author_email": "gabe.hackebeil@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Security :: Cryptography" ], "description": "PyORAM\n======\n\n.. image:: https://travis-ci.org/ghackebeil/PyORAM.svg?branch=master\n :target: https://travis-ci.org/ghackebeil/PyORAM\n\n.. image:: https://ci.appveyor.com/api/projects/status/1tpnf7fr0qthrwxx/branch/master?svg=true\n :target: https://ci.appveyor.com/project/ghackebeil/PyORAM?branch=master\n\n.. image:: https://codecov.io/github/ghackebeil/PyORAM/coverage.svg?branch=master\n :target: https://codecov.io/github/ghackebeil/PyORAM?branch=master\n\n.. image:: https://img.shields.io/pypi/v/PyORAM.svg\n :target: https://pypi.python.org/pypi/PyORAM/\n\nPython-based Oblivious RAM (PyORAM) is a collection of\nOblivious RAM algorithms implemented in Python. This package\nserves to enable rapid prototyping and testing of new ORAM\nalgorithms and ORAM-based applications tailored for the\ncloud-storage setting. PyORAM is written to support as many\nPython versions as possible, including Python 2.7+, Python\n3.4+, and PyPy 2.6+.\n\nThis software is copyright (c) by Gabriel A. Hackebeil (gabe.hackebeil@gmail.com).\n\nThis software is released under the MIT software license.\nThis license, including disclaimer, is available in the 'LICENSE' file.\n\nThis work was funded by the Privacy Enhancing Technologies\nproject under the guidance of Professor `Attila Yavuz\n`_ at Oregon State\nUniversity.\n\nWhy Python?\n-----------\n\nThis project is meant for research. It is provided mainly as\na tool for other researchers studying the applicability of\nORAM to the cloud-storage setting. In such a setting, we\nobserve that network latency far outweighs any overhead\nintroduced from switching to an interpreted language such as\nPython (as opposed to C++ or Java). Thus, our hope is that\nby providing a Python-based library of ORAM tools, we will\nenable researchers to spend more time prototyping new and\ninteresting ORAM applications and less time fighting with a\ncompiler or chasing down segmentation faults.\n\nInstallation\n------------\n\nTo install the latest release of PyORAM, simply execute::\n\n $ pip install PyORAM\n\nTo install the trunk version of PyORAM, first clone the repository::\n\n $ git clone https://github.com/ghackebeil/PyORAM.git\n\nNext, enter the directory where PyORAM has been cloned and run setup::\n\n $ python setup.py install\n\nIf you are a developer, you should instead install using::\n\n $ pip install -e .\n $ pip install nose2 unittest2\n\nInstallation Tips\n-----------------\n\n* OS X users are recommended to work with the `homebrew\n `_ version of Python2 or Python3. If you\n must use the default system Python, then the best thing to\n do is create a virtual environment and install PyORAM into\n that. The process of creating a virtual environment that is\n stored in the PyORAM directory would look something like::\n\n $ sudo pip install virtualenv\n $ cd \n $ virtualenv local_python2.7\n\n If you had already attempted to install PyORAM into the\n system Python and encountered errors, it may be necessary\n to delete the directories :code:`build` and :code:`dist`\n from the current directory using the command::\n\n $ sudo rm -rf build dist\n\n Once this virtual environment has been successfully\n created, you can *activate* it using the command::\n\n $ . local_python2.7/bin/activate\n\n Then, proceed with the normal installation steps to\n install PyORAM into this environment. Note that you must\n *activate* this environment each time you open a new\n terminal if PyORAM is installed in this way. Also, note\n that use of the :code:`sudo` command is no longer\n necessary (and should be avoided) once a virtual\n environment is activated in the current shell.\n\n* If you have trouble installing the cryptography package\n on OS X with PyPy: `stackoverflow `_.\n\n* If you encounter the dreaded \"unable to find\n vcvarsall.bat\" error when installing packages with C\n extensions through pip on Windows: `blog post `_.\n\nTools Available (So Far)\n------------------------\n\nEncrypted block storage\n~~~~~~~~~~~~~~~~~~~~~~~\n\n* The basic building block for any ORAM implementation.\n\n* Available storage interfaces include:\n\n - local storage using a file, a memory-mapped file, or RAM\n\n + Dropbox\n\n - cloud storage using SFTP (requires SSH access to a server)\n\n + Amazon EC2\n\n + Microsoft Azure\n\n + Google Cloud Platform\n\n - cloud storage using Amazon Simple Storage Service (S3)\n\n* See Examples:\n\n - examples/encrypted_storage_ram.py\n\n - examples/encrypted_storage_mmap.py\n\n - examples/encrypted_storage_file.py\n\n - examples/encrypted_storage_sftp.py\n\n - examples/encrypted_storage_s3.py\n\nPath ORAM\n~~~~~~~~~\n\n* Reference: `Stefanov et al. `_\n\n* Generalized to work over k-kary storage heaps. Default\n settings use a binary storage heap and bucket size\n parameter set to 4. Using a k-ary storage heap can reduce\n the access cost; however, stash size behavior has not been\n formally analyzed in this setting.\n\n* Tree-Top caching can be used to reduce data transmission\n per access as well as reduce access latency by exploiting\n parallelism across independent sub-heaps below the last\n cached heap level.\n\n* See Examples:\n\n - examples/path_oram_ram.py\n\n - examples/path_oram_mmap.py\n\n - examples/path_oram_file.py\n\n - examples/path_oram_sftp.py\n\n - examples/path_oram_s3.py\n\nPerformance Tips\n----------------\n\nSetup Storage Locally\n~~~~~~~~~~~~~~~~~~~~~\n\nStorage schemes such as BlockStorageFile (\"file\"), BlockStorageMMap\n(\"mmap\"), BlockStorageRAM (\"ram\"), and BlockStorageSFTP (\"sftp\") all\nemploy the same underlying storage format. Thus, an oblivious storage\nscheme can be initialized locally and then transferred to an external\nstorage location and accessed via BlockStorageSFTP using SSH login\ncredentials. See the following pair of files for an example of this:\n\n* examples/path_oram_sftp_setup.py\n\n* examples/path_oram_sftp_test.py\n\nBlockStorageS3 (\"s3\") employs a different format whereby the\nunderlying blocks are stored in separate \"file\" objects.\nThis design is due to the fact that the Amazon S3 API does\nnot allow modifications to a specific byte range within a\nfile, but instead requires that the entire modified file\nobject be re-uploaded. Thus, any efficient block storage\nscheme must use separate \"file\" objects for each block.\n\nTree-Top Caching\n~~~~~~~~~~~~~~~~\n\nFor schemes that employ a storage heap (such as Path ORAM),\ntree-top caching provides the ability to parallelize I/O\noperations across the independent sub-heaps below the last\ncached heap level. The default behavior of this\nimplementation of Path ORAM, for instance, caches the top\nthree levels of the storage heap in RAM, which creates eight\nindependent sub-heaps across which write operations can be\nasynchronous.\n\nIf the underlying storage is being accessed through SFTP, the\ntree-top cached storage heap will attempt to open an\nindependent SFTP session for each sub-heap using the same\nSSH connection. Typically, the maximum number of allowable\nsessions associated with a single SSH connection is limited\nby the SSH server. For instance, the default maximum number\nof sessions allowed by a server using OpenSSH is 10. Thus,\nincreasing the number of cached levels beyond 3 when using\na binary storage heap will attempt to generate 16 or more SFTP\nsessions and result in an error such as::\n\n paramiko.ssh_exception.ChannelException: (1, 'Administratively prohibited')\n\nThere are two options for avoiding this error:\n\n1. If you have administrative privileges on the server, you\n can increase the maximum number of allowed sessions for a\n single SSH connection. For example, to set the maximum\n allowed sessions to 128 on a server using OpenSSH, one\n would set::\n\n MaxSessions 128\n\n in :code:`/etc/ssh/sshd_config`, and then run the\n command :code:`sudo service ssh restart`.\n\n2. You can limit the number of concurrent devices that will\n be created by setting the concurrency level to something\n below the last cached level using the\n :code:`concurrency_level` keyword. For example, the\n settings :code:`cached_levels=5` and\n :code:`concurrency_level=0` would cache the top 5 levels\n of the storage heap locally, but all external I/O\n operations would take place through a single storage\n device (e.g., using 1 SFTP session).", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ghackebeil/PyORAM", "keywords": "oram,storage,privacy,cryptography,cloud storage", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "PyORAM", "package_url": "https://pypi.org/project/PyORAM/", "platform": "", "project_url": "https://pypi.org/project/PyORAM/", "project_urls": { "Homepage": "https://github.com/ghackebeil/PyORAM" }, "release_url": "https://pypi.org/project/PyORAM/0.2.1/", "requires_dist": null, "requires_python": "", "summary": "Python-based Oblivious RAM", "version": "0.2.1" }, "last_serial": 3462752, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "cc84cdc9f36f2fe5aa8b4521c88cec23", "sha256": "0e5f8fa6e86b5188d3e365215c91c039520cc0680cba52f996c56e1dc834c661" }, "downloads": -1, "filename": "PyORAM-0.1.2.tar.gz", "has_sig": false, "md5_digest": "cc84cdc9f36f2fe5aa8b4521c88cec23", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 53122, "upload_time": "2016-05-15T07:55:47", "url": "https://files.pythonhosted.org/packages/1e/d3/4f77c64e0a3fa3eda69d449a9e25befa92f73acf2200ab7a91288e8fb9d5/PyORAM-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "332bbba776413c0f135096b0ef0845f4", "sha256": "74fd7faa67d06263b07b85de8b7ad51b2f00d6b2e2e9af55e9ad8c6ad81da768" }, "downloads": -1, "filename": "PyORAM-0.2.0.tar.gz", "has_sig": false, "md5_digest": "332bbba776413c0f135096b0ef0845f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57037, "upload_time": "2016-10-19T03:08:12", "url": "https://files.pythonhosted.org/packages/93/ab/70ce9a0e11480fd64cb2057e6c368d2a4b4b5697e3f02ba11bb1896ed9f1/PyORAM-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "54f2d434a5a9297335ef738aca9c3ffd", "sha256": "753ae335a351cc195d8c8947a112b259d6b0dec90b7e392fb846e1d197fb79be" }, "downloads": -1, "filename": "PyORAM-0.2.1.tar.gz", "has_sig": false, "md5_digest": "54f2d434a5a9297335ef738aca9c3ffd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59493, "upload_time": "2018-01-04T21:28:33", "url": "https://files.pythonhosted.org/packages/26/6b/667d05c04ca52c68ceeab554995f00afad90134177df208b555f8c9a47b0/PyORAM-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "54f2d434a5a9297335ef738aca9c3ffd", "sha256": "753ae335a351cc195d8c8947a112b259d6b0dec90b7e392fb846e1d197fb79be" }, "downloads": -1, "filename": "PyORAM-0.2.1.tar.gz", "has_sig": false, "md5_digest": "54f2d434a5a9297335ef738aca9c3ffd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59493, "upload_time": "2018-01-04T21:28:33", "url": "https://files.pythonhosted.org/packages/26/6b/667d05c04ca52c68ceeab554995f00afad90134177df208b555f8c9a47b0/PyORAM-0.2.1.tar.gz" } ] }