難読化?暗号化?乱数化?キーワード検索方法に迷っています

このQ&Aのポイント
  • androidのプログラムでの値変換について悩んでいます。暗号化や乱数化は可能ですが、復号キーなしで元の値を求めることはほぼ不可能です。
  • AからBへの値変換は何かしらの手法で可能ですが、逆変換は困難です。復号キーなしで元の値を求める方法は存在しえません。
  • androidプログラムにおいて、値の変換は暗号化や乱数化によって行えます。しかし、逆変換は不可能です。
回答を見る
  • ベストアンサー

難読化?暗号化?乱数化?

こんにちは。 androidのプログラムで行いたいことがあるのですが、どんなキーワードで調べたらよいのかわからず困っています。 ある値Aを別の値Bに変換する処理なのですが、 A->B A'->B' A''->B'' と変換します。 A,A',A''と変換元の値が異なれば、変換後の値もB,B',B''と必ず違う値となります。 A,A',A''はそれぞれ別の端末内での値ですので、履歴等は使えません。 Aから暗号化でBを作る方法でまずまずいけるのですが、 B,B',B''から元の値、A,A',A''を求めることを不可能にしたいのです。 これは可能でしょうか。 もちろん、暗号化したものを、復号キーなしで元に戻すことはほぼ不可能なわけですが、 そもそも復号キーが存在しえない方法はあるのでしょうか。 以上です。ヒントでも構いません。よろしくお願いします。

  • Java
  • 回答数3
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.2

暗号化の鍵が一定ならば、一意に変わるんなら逆に戻すこともまた可能です。 ですから鍵を定期的に変更するしかありません。通信のたびに変更するか、途中ででも変更するか。 返還後の値が衝突して構わないならハッシュという手もありますけど。

titokani
質問者

お礼

回答ありがとうございます。 そうですよね。 一意に変わるということは情報が落ちていないということですから、必ず元に戻せるということで、元に戻せないということは、情報が落ちているということで、となると、重複した値が発生するということですよね。

その他の回答 (2)

  • yama1718
  • ベストアンサー率41% (670/1618)
回答No.3

ハッシュ関数を使う方法があります。 Aをハッシュ関数にかけてハッシュ値Bができますが、通常はBからAの逆算はできません。 元に戻せないのでデータの暗号化には使えないのですが、パスワード認証に使われる場合があります。 http://www.atmarkit.co.jp/fsecurity/special/165pswd/02.html

titokani
質問者

お礼

回答ありがとうございます。 ハッシュだと、確かに元には戻せないのですが、変換後の値が重複する可能性があるので、目的に合わないのです。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

復号キーが存在しえない方法は現在はありません。

titokani
質問者

お礼

回答ありがとうございます。 う~ん、やっぱりそうですよね。

関連するQ&A

  • 暗号化(perl)→復号化(php)

    暗号化キーを使用した暗号化→復号化で cgi(perl)で暗号化し、phpで復号化を行おうとしております。 AES暗号を使用したのですが、いろいろ設定を変えて 試みたのですが、うまくいきませんでした。 他に暗号化キーを使用した暗号化の方法がありましたら 教えてください。 暗号化(perl)→復号化(php)で実績のあるモジュールが あれば非常に助かります。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 画像のテキストデータ化・暗号化について

    いつもお世話になってます。 今回は画像の暗号化と変換についておしえてください。 現在、Androidのアプリ制作をしています。 画像をテキストデータにし暗号化したものをサーバにアップロードし、それをユーザがダウンロードしたときにプログラム(Java)によって復号し、元のpng画像に変換したいのですが、その方法がいまいちわかりません。 Q1.画像pngのバイナリデータをテキストデータにするにはどうしたらいいですか? Q2.テキストデータをプログラム(?)で暗号化するにはどうしたらいいですか?(できればJavaで。 初心者なので的外れな質問があるかと思いますが、どうぞよろしくお願いいたします。

    • ベストアンサー
    • Java
  • AES暗号にて、AES_set_encrypt_keyで設定されるAES_KEYについて

    VC++2008にてopensslを用いて、AES暗号/復号の機能を作成しています。 AES_set_encrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_ENCRYPT)にて暗号、 AES_set_decrypt_key → ivをコピー → AES_cbc_encrypt(~,AES_DECRYPT)にて復号するコーディングをしました。 (http://d.hatena.ne.jp/hnko/20090302/1235977892のenc_aes128_cbc_test()を参考にしましたので、 一連の流れは、こことほぼ同じです) デバッグしてみると、一見、暗復号が問題なく出来ていたので、 AES_set_encrypt_key関数の第一引数のkey配列の値と、 ivec配列の値を変えて、デバッグしてみたところ、 key配列を変更すると、暗号化後の文字列も変更されますが、 ivec配列を変更しても、暗号後の文字列に変化が有りませんでした。 調べてみたところ、AES_set_encrypt_keyにて返される AES_KEYのroundsの値が常に同じであることが原因と思われますが、 roundsの値が常に一定だと、暗号解読が比較的容易に 出来てしまうと思うのですが、上記で挙げたサイトでの コーディングの他に、何か別にコーディングを足さなければならないのでしょうか? よろしくお願いします。

  • 暗号文の質問です

    暗号文をつくろうとしてつくったのですが、 暗号文をつくることはできたのですが 暗号を元に戻す操作のプログラムを作るのができません。 本のヒントで暗号化を行うか、復号化を行うかはプログラムの開始時点で整数値を入力することにより指定(0を入力すると暗号化、1を入力すると復号化)するらしいです。なんかうまくいかないので教えてもらえるとうれしいです。 #include<stdio.h> int main(void) { char line[100]; int ix; while(gets(line) !=NULL) { ix =0; while(line[ix] !='\0') { if(line[ix]>='A'&&line[ix]<='Y' || line[ix]>='a'&&line[ix]<='y') line[ix] ++; else if(line[ix]=='Z'|| line[ix]=='z') line[ix] =25; ix++; } printf("%s\n",line); } }

  • 公開鍵暗号方式の復号に関して質問します。

    暗号方式は、発信者Aさんが正当な受信者Bさんに暗号化した電文を送付し、途中で不正に傍受したCさんには電文の復号ができず、正当な受信者Bさんには復号ができるという考えかたです。 正当なる受信者Bさんには復号が可能で、不正なる傍受者Cさんには復号が不可能であるためには、BさんとCさんの間に情報格差を維持しないと駄目だと思うのですが、公開鍵方式の場合に正当なる受信者Bさんと不正な傍受者Cさんの間にどのような情報格差が存在するのでしょうか。 === RSA暗号の例題を考えます === A:暗号の発信者 B:正当なる暗号の受信者 C:不正なる暗号傍受者 Aさんは 素数P=3 素数Q=11 を選んで、 33を法とする世界(Mod33)を利用します。 Aさんは原文を3乗し、Mod33を取った暗号文をBさんに送付しますが、ここで、公開鍵情報として、「33を法とする」および「3乗した」という二つの情報を開示して暗号を送付します。 暗号を不正に傍受したCさんは、33の素因数分解ができないために、P=3、Q=11という二つの素数を特定できず、3xD={nx(p-1}X(Q-1)+1}において、N=1の場合でもP,Qが分からないので、復号することがきません。 ところが正当なる受信者Bさんは、3xD=1x(3-1)x(11-1)+1=21より、D=7を求め、受診した暗号を7乗することで受信電文の復号が可能となります。  ==== 以上例題おわり ==== 不正なる傍受者Cさんは素因数分解が困難であることから二つの素数P、Qの特定ができずに復号ができないことは良く理解できます。 しかし、正当なる受信者Bさんは、なぜP,Qを特定し、D=7を求めることが出来るのでしょうか。 質問1:なぜBさんだけが復号可能なのでしょうか? 質問2:Bさんは素因数分解をせずとも、P=3、Q=11という二つの素数を知ることができるのでしょうか? 質問3:素数P、Qの値を特定できなくてもD=7を知ることができるのでしょうか? 公開鍵暗号方式の根本原理が分かっていないと思われるので、公開鍵暗号方式、あるいはRSA暗号方式の考え方をご存じの方ご教示いただけると助かります。

  • 暗号のアルゴリズムについて

    公開鍵暗号方式・共通鍵暗号方式があるのはわかっているのですが、 共通鍵暗号方式では、送信者・受信者共に同じ鍵を使うため、同じアルゴリズムで暗号化・復号を行うのであろうと予想はつくのです。 (DESや3DESがあると思うのですが、多分共通鍵にDESを使うとかかいてある?) ・質問 公開鍵暗号の場合、 AがBにデータを送る際、Bの公開鍵でデータを暗号化すると思うのですが この時、Bの公開鍵(証明書?)に、RSAで変換 といったことが書かれているのでしょうか? 公開鍵暗号には、楕円曲線暗号、ElGamal暗号があると思うのですが、 もし、Bの公開鍵に、暗号方式が書いていないと、Bの秘密鍵がRSAだった場合復元できなくなってしまうと思うのですが・・・。 初歩的な質問ですみませんが、 どなたかご教授いただけないでしょうか?

  • RSA暗号についての素朴な疑問

    RSA暗号について勉強中のものですが、これまでのところ (1)送信側はは公開鍵(e,n)で平文aを b = a^e mod n で暗号文bを作成する。 (2)受信側は秘密鍵dを知っており、上記暗号文bからb^d mod n で元の平文aが求まる。 (3)暗号としてのキモは、(e,n)からでは復号できない。dを求めることも困難(nの素因数分解が困難) というのが私の理解したところです。数式等もある程度理解しました。 ただ、ここで素朴な疑問があります。dをしらなくてもbのべき乗を繰り返していけば復号できるのでは?ということです。自分が送信側で平文aを暗号化してbを作る。bから bxb→b' b'xb→b'' b''xb→b'''  と計算していけば平文aにたどり着くのでは? (その結果dもわかったことになる) 平文が現れたかのチェック時間は余分にかかると思いますが、dを知っていてbのd乗を計算するのと上記のように2乗、3乗...と繰り返すのと大きな違いがあるのでしょうか? 長文ですいません。

  • 暗号・復号 cgiスクリプトについて

    こんにちは。 私はcgiスクリプトにて文字を暗号化させたいと思っています。 友人に暗号化復号化スクリプトを書いてもらったのですが どうやって動かすかよくわかりません。 http://www.rescue.ne.jp/cgi/htpasswd/makepwd-des/ 上記のサイトのように出力させたいのですが、スクリプトだけでは私には難しいです。 その友人は海外に行ってしまい連絡が今は取れないんです。 sub enc_string{ my ($key, $string) = @_; my @map = (('A' ... 'Z'), ('a' ... 'z'), ('0' ... '9'), '+', '&'); my @key = unpack('C*', $key); my $str = ''; my @x = map { int(rand(200)) } (0 ... 2); @key = map {$x[$_] ^ $key[$_]} (0 ... 2); while($string ne ''){ my $n = substr($string, 0, 3, ''); my @n = unpack('C3', $n); map{$n[$_] ^= ($key[$_])} (0 ... 2); @key = unpack('C3', $n); @key = map {$x[$_] ^ $key[$_]} (0 ... 2); my $a = $n[0] >> 2; my $b = (($n[0] & 3) << 4) | ($n[1] >> 4); my $c = (($n[1] & 15) << 2) | ($n[2] >> 6); my $d = $n[2] & 63; $str .= $map[$a] . $map[$b] . $map[$c] . $map[$d]; } my $a = $x[0] >> 2; my $b = (($x[0] & 3) << 4) | ($x[1] >> 4); my $c = (($x[1] & 15) << 2) | ($x[2] >> 6); my $d = $x[2] & 63; return $str.'<>'.$map[$a].$map[$b].$map[$c].$map[$d]; } このスクリプトで暗号するようですが、初心者なものでどうやって 手直し?追加すればよいのでしょうか? #!/usr/bin/perlを最初に入れるのはわかります。 あとこのスクリプトの他に復号、MD5にて暗号のスクリプトがあります。 まずは暗号化させてみたいのですが、よろしくお願いします

  • 学校でRSA暗号について勉強して分からないところがありましたので質問し

    学校でRSA暗号について勉強して分からないところがありましたので質問します。 暗号文の作成者をAさん、復号者をBさんとします。 Aさんは暗号文と公開鍵{e,n}を一般に公開しますよね? 暗号文を復号化するには秘密鍵が必要ですが、Bさんはeとnしか分からない(一般の人と得られる情報が同じ)のにどうやって秘密鍵を作成するのですか?nのもとになっている2つの素数がわからないことには秘密鍵が作成できないとおもうのですが… RSA暗号はnの素因数分解が計算量的に困難だから安全なんですよね?Bさんはどうやって2つの素数を特定するのでしょうか? 教えてください。

  • 暗号が解けません

    19 14゛ 9 2 15 1A  14 96 E゛ 2A 1C゜ 18 10  7  13゛ 8  26  1F   B   2A  6  12   5 ヒントは「暗号文全てをしっかりみること」と数時とアルファベットの組み合わせと言ったら…ってだけです。。 自分は全然出来ないので、頭の切れる方宜しくお願いします。。。解き方だけでも良いのでお願いします。

専門家に質問してみよう