{"id":27255442,"url":"https://github.com/yasuenag/hwrand","last_synced_at":"2026-02-16T16:34:05.519Z","repository":{"id":65237635,"uuid":"48747826","full_name":"YaSuenag/hwrand","owner":"YaSuenag","description":"SecureRandom powered by x86 processor","archived":false,"fork":false,"pushed_at":"2025-02-02T10:00:08.000Z","size":86,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-28T13:31:41.878Z","etag":null,"topics":["java","randomization","rdrand","rdseed"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/YaSuenag.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2015-12-29T13:03:29.000Z","updated_at":"2025-02-02T10:00:11.000Z","dependencies_parsed_at":"2024-05-04T02:29:31.530Z","dependency_job_id":"597466fa-d442-4cbd-ac3f-6c8e36787f3b","html_url":"https://github.com/YaSuenag/hwrand","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/YaSuenag/hwrand","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSuenag%2Fhwrand","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSuenag%2Fhwrand/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSuenag%2Fhwrand/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSuenag%2Fhwrand/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/YaSuenag","download_url":"https://codeload.github.com/YaSuenag/hwrand/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/YaSuenag%2Fhwrand/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000715,"owners_count":26082911,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","randomization","rdrand","rdseed"],"created_at":"2025-04-11T02:19:44.680Z","updated_at":"2026-02-16T16:34:05.512Z","avatar_url":"https://github.com/YaSuenag.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"HWRand\n![CodeQL](../../workflows/CodeQL/badge.svg)\n===================\nHWRandはIntelプロセッサのRDRAND、RDSEED命令を用いた乱数生成を行うためのSecureRandom実装です。\nRDRANDはNIST SP 800-90A、RDSEEDはNIST SP 800-90BとCに対応しているようです。\n[The Difference Between RDRAND and RDSEED](https://software.intel.com/en-us/blogs/2012/11/17/the-difference-between-rdrand-and-rdseed)\n\nNIST SP 800-90A～Cは [JEP 273: DRBG-Based SecureRandom Implementations](http://openjdk.java.net/jeps/273) として、JDK 9で実装が追加される予定ですが、HWRandを利用することで、Linux x86/x86_64環境ではJDK 8以前でもこれらの乱数が利用可能となります。\n\n# 対応環境\n\n* JDK 6以降\n* Linux x86_64\n   * 動作チェックはUbuntu 20.04 (WSL2) x86_64で実施\n   * ビルドにはJDK、GCC、GNU Make、GNU Assembler、Maven必須\n\nJDK 22 以降の場合は Foreign Function \u0026 Memory API を用いた、RDRAND / RDSEED 各命令のダイレクト呼び出しをサポートします。これは Linux だけでなく Windows でも動作します。\n\nJDK 25 以降の場合は JVMCI を用いた RDRAND / RDSEED の呼び出しもサポートします。これも Windows でも動作しますが利用時には Java 起動オプションの設定が必要です。 `java` 起動引数に `@jvmci.opts` のように [jvmci.opts](jvmci.opts) またはその記述内容を設定する必要があります。\n\nJVMCI サポートを無効にしたい場合は実行時に `-Dhwrand.disableJVMCI=true` のように `hwrand.disableJVMCI` システムプロパティを `true` に設定します。JVMCI サポートが無効の場合は JVMCI 関連オプションを設定する必要はありません。\n\n\u003e [!TIP]\n\u003e JVMCI の実装には [ffmasm](https://github.com/YaSuenag/ffmasm) 付属の [jvmci-adapter](https://github.com/YaSuenag/ffmasm/packages/2776023) を利用しています。\n\n\u003e [!NOTE]\n\u003e jvmci.opts には Unnamed Module の設定が記述されています。名前付きモジュールで HWRand を利用する場合は `jdk.internal.vm.ci` のエクスポート先を `com.yasuenag.ffmasmtools.jvmci` に設定してください。\n\n# ビルド方法\n\n```\nJAVA_HOME=/path/to/jdk8 mvn compile\nJAVA_HOME=/path/to/jdk22 mvn compile\nJAVA_HOME=/path/to/jdk25 mvn compile\nJAVA_HOME=/path/to/jdk25 mvn package\n```\n\n\u003e [!TIP]\n\u003e テストは各 JDK バージョンで `mvn verify` を行うことで実施できます。\n\n# 利用方法\n\n* [SecureRandom#getInstance(String)](http://docs.oracle.com/javase/jp/8/docs/api/java/security/SecureRandom.html#getInstance-java.lang.String-) にそれぞれの引数を与えてインスタンスを取得してください。\n    * RDRAND（NIST SP 800-90A）\n        * X86RdRand\n        * FFMX86RdRand\n        * JVMCIX86RdRand\n    * RDSEED（NIST SP 800-90B/C）\n        * X86RdSeed\n        * FFMX86RdSeed\n        * JVMCIX86RdSeed\n* 具体的な利用方法については [実装例](examples/all-randoms/src/main/java/com/yasuenag/hwrand/example/allrandoms/Main.java) もご覧ください。\n\n# 注意\n\n* HWRandは、実行されるプロセッサがRDRAND、RDSEEDをサポートするか判断し、未サポートのCPUの上では当該機能が利用できません。\n    * RDRAND（NIST SP 800-90A）\n        * Ivy Bridge以降\n    * RDSEED（NIST SP 800-90B/C）\n        * Broadwell以降\n* 実装は [SecureRandomSpi](http://docs.oracle.com/javase/jp/8/docs/api/java/security/SecureRandomSpi.html) に対して行っていますが、engineGenerateSeed()とengineNextBytes()は同じ挙動（同じソースからの乱数取得）となります。また、engineSetSeed()は何も行いません（空実装です）。\n* クラッシュ等、アプリケーションが異常終了した場合は一時ディレクトリに生成されるネイティブライブラリ（ `libhwrandx86-*.so` ）が残存する場合があります（デフォルトでは `/tmp` 配下）。\n\n# License\n\nGNU General Public License v2\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyasuenag%2Fhwrand","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyasuenag%2Fhwrand","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyasuenag%2Fhwrand/lists"}