タグ

暗号に関するanimistのブックマーク (25)

  • TLSとDiffie-Hellmanグループパラメータ - Qiita

    最初に算出する共通値 (g, p) はグループパラメータと呼ばれます。秘密である必要はなく、無暗号でそのまま送ります。 このグループパラメータ、従来のTLSではサーバ側でランダムに生成するものとされてきました。これが第一の流派です。 第二の流派は、 (g, p) の一覧表をあらかじめ仕様書に書いておき、使うときはその中から選んで使うというものです。この流派の代表的な存在はIPSecです。例えばIKEv1の場合、IANAの番号表に載っているうち、1, 2, 5, 14, 15, 16, 17, 18, 22, 23, 24の11種類がMODP DHのグループパラメータです。 sshの場合、IANAの番号表に載っているうち、MODP DH対応なのはdiffie-hellman-group-exchange-sha1, diffie-hellman-group-exchange-sha256,

    TLSとDiffie-Hellmanグループパラメータ - Qiita
  • フォントの形を変えて情報を隠ぺいする技術「FontCode」--文字は文字に隠せ

    コロンビア大学の研究チームは、テキスト情報を密かに保存する手段として、情報隠ぺい技術(ステガノグラフィ)「FontCode」を開発した。何らかの物を人目につかなくしたい場合、“木は森に隠せ”などと言われるが、同チームの考案した技術は“文字を文字に隠す”手法である。 FontCodeは、任意の文章を利用し、その文章を構成するフォントの形状を微妙に変えることで別の情報を文章内に埋め込む技術フォントの形状変化はわずかで、元文章の内容は改変されないため、見ただけでは情報が隠されていることなど分からないという。 隠したい情報は、ASCIIまたはUnicodeでビット列に変換し、さらに整数情報へと変換する。そして、この整数値を利用してフォントの形を変えることで、情報を埋め込む。隠ぺいした情報は、変形済みの文章をスキャナやスマートフォンのカメラで画像として取得し、フォント来の形状と比較すれば取り出せ

    フォントの形を変えて情報を隠ぺいする技術「FontCode」--文字は文字に隠せ
  • [JavaScript]CryptoJSでAES暗号のsaltとパスフレーズからkeyを求める - Qiita

    CryptoJSはクライアントサイドで暗号化や復号化ができる。 AESの鍵長は128bit以上だが、128bitより短いパスフレーズでもCryptoJSなら暗号化できる。 正確にはパスフレーズとsaltから鍵を内部で生成している。 var encrypted = CryptoJS.AES.encrypt('message', 'pass'); console.log(encrypted.salt.toString()); // 467c08b2364309e8 console.log(encrypted.key.toString()); // 6e475a9672994638c4231bd750ab7aceeb9004229f0a26c3622a2045deb789e9 上記のスクリプトのencrypted.keyが実際に使用される鍵である。 AESで暗号化したデータを復号化するときに進捗

    [JavaScript]CryptoJSでAES暗号のsaltとパスフレーズからkeyを求める - Qiita
  • JavaScriptでCryptoJSを使って、AESの暗号化と復号を行う | 開発などブログ | HiBARA SOFTWARE

    ウェブサイトを見回してみても、正しく実装されていなかったり、良いサンプルが無かったので、記事にしてみました。 → DEMO&ソースコード:https://jsfiddle.net/hibara/qzono8jb/ CryptJSについては、以下にあります。 https://code.google.com/archive/p/crypto-js/ 暗号化するにあたって CryptJSの題に入る前に、少し暗号化についてのお作法を知っておく必要があります。詳細は僕が書いた、別記事の「Visual Studio C#でファイルを暗号化してみる」を参照していただきたいですが、一応ざっとおさらい。 暗号化モードではCBCモードを使うのがベター ブロック暗号方式と呼ばれるものは、その名のとおり、何バイトかずつブロック単位で暗号化していきますが、ここでやりがちなのがECBモードでしょうか。 これの何が問

  • PyCryptoでAES暗号を使ってみた | 三鷹台でひきこもるプログラマの日記

    PythonでAES暗号を取り扱わなければならなくなったので備忘録代わりにメモ。 まずはPyCryptoをインストール。 $ pip install PyCrypto それではAESの暗号化、復号化してみるよ。 こんなコード書いてみた。 CBCモードで初期ベクトルは乱数を使ってる。 import os import hashlib from Crypto.Cipher import AES # key and initial vector secret_key = hashlib.sha256('This is secret passphrase.').digest() iv = os.urandom(16) # plain text plain_text = 'A' * 16 # encrypt aes = AES.new(secret_key, AES.MODE_CBC, iv) en

  • 【Python】pycryptoで投げるたけでAES暗号化復号してくれる関数作った。 - Qiita

    できること ・平文・パスワード・ベクトルを引数に入れて実行するとbase64形式で暗号化されたデータを返す。 ・同様に平文をbase64形式で暗号化されたデータに差し替えて実行すると平文を返す。 AES暗号化の条件 鍵は16バイト,24バイト,32バイトのうちのいずれかの長さにしなければならない。 平文は16バイトの倍数の長さにしなければならない。 ivを使用して、推測されにくくする。 ivに関しては一つのアプリケーションに対して同一のものを使うのが適切かと思います。 コピペして使っても大丈夫だとは思うが、AESの理解が完全ではないため正しいコードかは保証できない。 脆弱性があるならコメントでご指摘をお願いします。 インストールは from Crypto.Cipher import AES import hashlib import base64 def get_encrypt_data(

    【Python】pycryptoで投げるたけでAES暗号化復号してくれる関数作った。 - Qiita
  • Pythonで暗号化と復号化 - Qiita

    import base64 from Crypto import Random from Crypto.Cipher import AES class AESCipher(object): def __init__(self, key, block_size=32): self.bs = block_size if len(key) >= len(str(block_size)): self.key = key[:block_size] else: self.key = self._pad(key) def encrypt(self, raw): raw = self._pad(raw) iv = Random.new().read(AES.block_size) cipher = AES.new(self.key, AES.MODE_CBC, iv) return base64.b64e

    Pythonで暗号化と復号化 - Qiita
    animist
    animist 2018/01/16
    ("PkDv17c6xxiqXPrvG2cUiq90VIrERfthHuViKapv6E1F7E0IgP")
  • pythonのCryptoでAES暗号を使ってみた - Blanktar

    暗号っていいよね。なんかこう、楽しい。 というわけで、pythonで試してみました。 といっても、残念ながら標準ライブラリにはそれっぽいのがない。 hmacとかsslとかはあるんだけどねー。 AESくらいは標準ライブラリに入れといて欲しいよね・・・。ま、仕方がない。 仕方がないので、今回使うのはpycryptoっていうライブラリを使わして頂きます。 インストールgentooのportageにパッケージがあったので有難く利用。 python2.xでもpython3.xでもCryptoって名前のパッケージになります。 小文字じゃないんだね、頭。 gentoo以外を使ってる方はpypiにあるpycryptoのページあたりからどうぞ。 使ってみる早速AESで遊んでみます。 1つ注意しなきゃいけないのは、AESはブロック暗号だということ。 つまり、鍵長は16バイト、24バイト、32バイトのうちのどれ

    pythonのCryptoでAES暗号を使ってみた - Blanktar
  • 異なる言語間での暗号化/復号化(PythonでEncrypto、JavaでDecrypto) - Qiita

    Pythonで作ったデータを暗号化して、Javaで復号したい セキュリティ上の話で、そんなことが必要になった。 どちらもCryptoというライブラリがあるからすぐできるだろうと思っていたら大ハマりで、復号に至るまでに4時間くらいかかった。 参考 http://nori3tsu.hatenablog.com/entry/2013/10/01/012130 ハマった私に降りた天使のようなページ。 https://qiita.com/pink/items/f795b0680a2a000e1934 http://pentan.info/doc/block_cipher.html#anc_padding パディングについて説明してくれているページ。 ポイント 暗号化には次の考えておくべき要素がある。(かなりざっくり) 暗号化の種類→今回はAESとする 鍵 ECB/CBC/OFB 暗号化対象のパディン

    異なる言語間での暗号化/復号化(PythonでEncrypto、JavaでDecrypto) - Qiita
  • Javaの標準AES暗号化アルゴリズム互換のRuby(Python)実装 - nori3tsu's blog

    随分前に悩んだことでまた悩んでしまったのでメモ。 Java/Python/Rubyのそれぞれの実装をまとめました。 Javaで"AES"と指定して暗号化/復号したデータをRubyで復元する際、 AESの知識が乏しいせいでRubyでどうやって復元すれば良いのかわからず困ってしまったため、 次回から悩まないためにJavaの標準AESアルゴリズムと互換性のあるRubyの実装書いてみました。 ついでに最近少し触っているPythonでも書いてみました。 AESはブロック暗号です。 ブロック暗号についてはコチラが詳しいです。 Javajavax.crypto.Cipherクラスで単純に"AES"として暗号化すると"AES/ECB/PKCS5Padding"という形式になります。 鍵長: 128bit 暗号モード: ECB パディング方式: PKCS5Padding 暗号モードのECBはある文字列を暗

    Javaの標準AES暗号化アルゴリズム互換のRuby(Python)実装 - nori3tsu's blog
    animist
    animist 2018/01/16
    pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
  • CryptoSwiftでAES暗号化する + PKCS#5とか#7のはなし - Qiita

    Swiftで文字列をAESで暗号化したい。 のですが、Security FrameworkはObjective-C向けのAPIしか提供していません。 しかもC インタフェースなのか… Security | Apple Developer Documentation ということで、Swiftで利用可能な暗号化ライブラリを調べていたところ、CryptoSwiftが見つかったので利用してみます。 krzyzanowskim/CryptoSwift: CryptoSwift is a growing collection of standard and secure cryptographic algorithms implemented in Swift READMEのWhyの項に、'Why? Because I can.' と書かれていてかなりCoolです。 Coolだhttps://t.co

    CryptoSwiftでAES暗号化する + PKCS#5とか#7のはなし - Qiita
    animist
    animist 2018/01/16
    AES/CBC/PKCS5Padding
  • ClojureでAES暗号化をしてみる&AESのちょっと細かい話 - Qiita

    ClojureでのAES暗号化するコードを作ってみました。 Javaの標準ライブラリを使ってできるのでそんなに難しくないですね。 (import '[java.security SecureRandom Key] '[javax.crypto KeyGenerator Cipher] '[javax.crypto.spec IvParameterSpec] '[java.security.spec AlgorithmParameterSpec]) (defn ^bytes rand-bytes [n] (let [b (byte-array n)] (.. (SecureRandom.) (nextBytes b)) b)) (defn ^Key aes-genkey [^long bits] {:pre[(#{128 192 256} bits)]} (let [kg (KeyGener

    ClojureでAES暗号化をしてみる&AESのちょっと細かい話 - Qiita
  • [暗号化]ブロック暗号とは(AES/DES/Blowfish PKCS5Padding ECB/CBC IV) - [技術資料 + 技術資料] ぺんたん info

    ブロック暗号とは共通鍵暗号の一種で、ブロックと呼ばれる固定長のデータ単位で暗号化を行います。 (ビット単位やバイト単位で暗号化をするものはストリーム暗号です。) [参考記事] PHPで暗号化・複合化を行う ブロック暗号 [参考記事] Javaで暗号化・複合化を行う ブロック暗号 [参考記事] Perlで暗号化・複合化を行う ブロック暗号 [参考記事] Rubyで暗号化・複合化を行う ブロック暗号 平文データ(生データ)から暗号化されたデータを作成することを暗号化(encryption、encrypt)、暗号化されたデータから元の平文データに戻すことを復号(decryption、decrypt)といいます。 プログラム言語の暗号化ではencryptやdecryptなどの関数名・メソッド名になっていることが多いです。 もちろん元に戻せる(可逆変換)ことが前提で、md5やshaなどはハッシュ化と

  • 暗号化方式/アルゴリズム/パディング/ブロック化のまとめ - Qiita

    このうちAES,RSAがよく使われる。 またハイブリット方式というものもよく使われる(SSLとか)。 共通鍵暗号では、処理時間が高速なのですが、第三者に鍵の情報が分かってしまうとデータが復号されてしまうという問題があります。また、公開鍵暗号では、安全に鍵の情報を保持できるのですが、処理時間が非常に遅いという問題があります。そこで、これら2つの方式の利点を兼ね備えたハイブリッド方式という手法があります。ハイブリッド方式では、共通鍵を安全に渡すために、鍵交換の際には公開鍵暗号を使用して、実際のデータの暗号化には共通鍵を使用します。これにより鍵は安全に配布でき、高速処理できます。 http://www.infraexpert.com/study/security4.html ブロック単位での暗号化 AESにせよRSAにせよ、通常、暗号化は鍵のサイズと同じバイト長を1ブロックとして暗号化する。10

    暗号化方式/アルゴリズム/パディング/ブロック化のまとめ - Qiita
  • 暗号化ライブラリ pycrypto · kamatari

    Pythonと情報セキュリティ Pythonは情報セキュリティの世界でよく使われる言語でもあります。 いろいろな計算を行うライブラリが標準、外部ライブラリともにそろっていたり、Pythonのインタプリタの使い勝手がよかったり、手軽に書きやすいなどの理由から愛用している人も多いようです。 TBS系で放送されたブラッディ・マンデイというドラマで主人公の凄腕ハッカーPythonを使っていたことが(一部で)話題になっていたこともありました。 そんなPythonの暗号化/復号化するためのライブラリ「pycrypto」を紹介します。 [pycrypto] https://pypi.python.org/pypi/pycrypto [ドキュメント] http://pythonhosted.org/pycrypto/ pycryptoのつかいかた まずはpipでinstallを行います。 $ pip i

  • オレオレ証明書を使いたがる人を例を用いて説得する - Qiita

    TIS Engineer Advent Calendar 2015 4日目はExcelから予定を変更して証明書のお話です。 はじめに SSLサーバ証明書を用いたHTTPS通信は一般的になってきましたが、社員向けWebサービスなどにおいては自己署名証明書(通称:オレオレ証明書)が使われている例も少ないながら見受けられます。 これらのサーバの中には「暗号化できているから良いじゃないか」と、有料のSSL証明書を買ってもらえない例もあるかもしれません。 この記事ではこういった場合の説得に使える「オレオレ証明書は何故まずいのか」について、まずい例と許容できる例を取り上げつつ説明していきたいと思います。 SSLサーバ証明書の役割について SSLサーバ証明書には3つの役割があります。 暗号化。サーバ側とクライアント側で暗号化/復号化を行うことにより、通信経路上での盗聴・改竄を防ぎます。 通信相手が正しい

    オレオレ証明書を使いたがる人を例を用いて説得する - Qiita
  • 暗号化できればよいという考えは危険!自己署名証明書の危険性とは?

    証明書の正当性は、来階層構造を上位にたどることによってルート証明書にたどり着くことで確認ができます。しかし第三者認証局の階層に参加せずとも、勝手にサーバ証明書を作ることができる「オレオレ証明書」と呼ばれる自己署名証明書も、知識があれば自分で作成することが可能です。しかしこうした正当性が証明できない自己署名証明書を使うことは信頼できないサイトという評価になります。 この記事では、なぜ自己署名証明書が危険なのか信頼のできない証明書であるかについて解説します。 「自己署名証明書」は、なぜ信頼できない証明書といわれてしまうのか把握しよう SSL通信において「電子証明書」は、重要な個人情報や決済情報を暗号化して、万が一途中でデータが盗まれた場合でも、内容が書き換えられないようにしてくれる大切な働きを持っています。 この暗号化をするにあたって、電子証明書は第三者認証局に依頼せずに作成した「自己署名証

    暗号化できればよいという考えは危険!自己署名証明書の危険性とは?
  • 初期化ベクトル - Wikipedia

    初期化ベクトル(英: initialization vector、IV)はビット列であり、ストリーム暗号またはブロック暗号を任意の暗号利用モードで実行するとき、同じ暗号鍵でストリームを生成しても毎回異なるストリームを生成するのに必要とされる。これにより、毎回暗号鍵を替えるといった時間のかかる作業を省くことができる。 IVの大きさは使用する暗号化アルゴリズムと暗号プロトコルに依存し、通常は暗号のブロックサイズと同じか暗号鍵と同じサイズである。IVは受信者がその暗号を解読する際に必須である。IVを渡す方法としては、鍵交換やハンドシェイクの際に合意した上でパケットと共にIVを送るか、IVの計算方法を共有しておくか、現在時間のようなインクリメンタルな測定値(RSA SecurID、VASCO Digipassなどのハードウェア認証トークン)や、送信者または受信者のID、ファイルID、パケット、セク

  • 暗号利用モード - Wikipedia

    「IGE」はこの項目へ転送されています。In Ground Effectについては「地面効果」をご覧ください。 暗号利用モード(あんごうりようモード、Block cipher modes of operation)とは、ブロック暗号を利用して、ブロック長よりも長いメッセージを暗号化するメカニズムのことである。 ECBモード(単純なブロック暗号の利用法)では、ある鍵で同一の平文を暗号化すると、同一の暗号文になる。したがって、長いメッセージ(画像データなど)のある部分が他の部分と同じであるかどうかが、暗号文の比較によって判断できてしまうので、他のモードが必要となった。 暗号利用モードには、秘匿用の利用モードと、認証用の利用モードとがある。 秘匿用の利用モード[編集] 秘匿用として多くの暗号利用モードが定義されており、これらのうち、ECB, CBC, OFB, CFBの4つは、FIPS, ANS

    暗号利用モード - Wikipedia
  • Advanced Encryption Standard - Wikipedia

    完全な総当たり攻撃よりも計算量の多い攻撃が発表されているが、2013年時点では計算量が少ない攻撃は見つかっていない:[3] AES-128については、完全2部グラフ(Biclique)を使用すると2126.1の計算量で鍵を復元することが可能である。AES-192とAES-256に対するBiclique攻撃(英語版)では、それぞれ2189.7と2254.4の計算複雑度が適用される。関連鍵攻撃では、AES-192とAES-256をそれぞれ2176と299.5の複雑さで破ることができる。 Advanced Encryption Standard (AES) は、アメリカが2001年に標準暗号として定めた共通鍵暗号アルゴリズムである。アメリカ国立標準技術研究所(NIST)が公募し、Rijndael(ラインダール)がAESとして採用された[4]。 概要[編集] AES以前の標準暗号であったDESは、

    Advanced Encryption Standard - Wikipedia