• 締切済み

一般的なセキュリティ(暗号化)

こんにちは、Perlを始めて2週間の者です。 只今、認証ページを勉強&作成中です。 IDとPASSに関しては暗号化して認証することを考えていますが、 crypt関数で暗号化すると、8文字以降は切り捨てられるとのことなので、 入力文字列を8文字で区切り、それぞれを暗号化した後に結合して 1つの暗号化された文字列を生成しました。 8文字以上の(文字数が多い)方が安全性が増すという意味合いからです。 また、入力値を暗号化する前に、reverseで逆順にしたりしましたが、 こういった処理には(文字数を増やしたり、逆順にする)意味がありますか? (さほど、セキュリティ強度は変わらないのでしょうか?) また、完全な暗号化は存在しないと承知の上ですが、MD5等も 強度が低いと聞きました。 通常、認証時のデータはどのようなセキュリティを施すべきですか? (○○○をすれば十分というものは?)

  • Perl
  • 回答数3
  • ありがとう数4

みんなの回答

  • perlerz10
  • ベストアンサー率40% (4/10)
回答No.3

つまるところいくら対策を施しても、そのターゲットになってしまえばやられてしまうわけで、また何より怖いのは身内からの漏洩というのもあります。結局のところ、どのようなスタンスの元で対策を行うか、また対象とする外敵は何を想定するかということでとるべき手法が変わってくると思います。 perlを始めて2週間ということでしたので、雰囲気的にはこんな感じですよというお話になってしまいました。あまり参考になる話が出来ずに申し訳ないです。とりあえずは大事なファイルは上位のディレクトリに置いておきましょう。名称をcgiにしておけば見られないというのも、サーバの設定しだいでは普通にブラウザで見えちゃったりしますし、そういったサイトも多いです。

kinoshita8
質問者

お礼

アドバイスありがとうございます。 今は、認証式の掲示板を作成しようとしているのですが、 モジュールを使うには勉強が必要なので、とりあえず、 DESかMD5で暗号化しておくくらいで良いんでしょうか?

kinoshita8
質問者

補足

SHAモジュールを使うことにしました。 ありがとうございました。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

とりあえずMD5は暗号化そのものとは関係ありません。 #MD5で暗号化する。ということなどないというほどの意味です。 ppm> search crypt Downloading tcool packlist...not modified Downloading The University of Winnipeg's 5.8 PPM repository packlist...done Updating The University of Winnipeg's 5.8 PPM repository database...done Downloading th packlist...done Updating th database...done 1: Crypt-Blowfish v2.10 2: Crypt-Blowfish v2.10 3: Crypt-Blowfish v2.10 4: Crypt-CAST5_PP v1.04 5: Crypt-CAST5_PP v1.03 6: Crypt-CAST5_PP v1.03 7: Crypt-CBC v2.22 8: Crypt-C_LockTite v1.00 9: Crypt-C_LockTite v1.00 10: Crypt-CapnMidNite v1.00 11: Crypt-CapnMidNite v1.00 12: Crypt-DES v2.05 13: Crypt-DES v2.05 14: Crypt-DES v2.05 15: Crypt-DES_EDE3 v0.01 16: Crypt-DES_EDE3 v0.01 17: Crypt-DES_EDE3 v0.01 18: Crypt-DES_EEE3 v0.01 19: Crypt-DES_EEE3 v0.01 20: Crypt-DES_PP v1.00 21: Crypt-DES_PP v1.00 22: Crypt-DH v0.06 23: Crypt-DH v0.06 24: Crypt-DH v0.06 25: Crypt-DSA v0.14 26: Crypt-DSA v0.14 27: Crypt-DSA v0.14 28: Crypt-GOST v1.00 29: Crypt-GOST v1.00 30: Crypt-IDEA v1.08 31: Crypt-IDEA v1.08 32: Crypt-IDEA v1.08 33: Crypt-License v2.02 34: Crypt-License v2.02 35: Crypt-Lite v0.82.06 36: Crypt-Lite v0.82.06 37: Crypt-OICQ v0.0 38: Crypt-OICQ v0 39: Crypt-OpenPGP v1.03 40: Crypt-OpenPGP v1.03 41: Crypt-OpenSSL-RSA v0.22 42: Crypt-OpenSSL-RSA v0.22 43: Crypt-OpenSSL-Random v0.03 44: Crypt-OpenSSL-Random v0.03 45: Crypt-PasswdMD5 v1.3 46: Crypt-Primes v0.50 47: Crypt-Primes v0.50 48: Crypt-RC4 v2.02 49: Crypt-RC4 v2.02 50: Crypt-RC5 v2.00 51: Crypt-RC5 v2.00 52: Crypt-RC6 v1.0 53: Crypt-RC6 v1 54: Crypt-RIPEMD160 v0.04 55: Crypt-RSA v1.57 56: Crypt-RSA v1.57 57: Crypt-Random v1.25 58: Crypt-Random v1.25 59: Crypt-Random v1.25 60: Crypt-Rijndael v1.04 61: Crypt-Rijndael v1.02 62: Crypt-Rijndael v1.02 63: Crypt-SSLeay v0.53 64: Crypt-SSLeay v0.53 65: Crypt-SSLeay v0.53 66: Crypt-Shark v1.0.1 67: Crypt-Shark v1.0.1 68: Crypt-Simple v0.06 69: Crypt-Simple v0.06 70: Crypt-Tea v2.12 71: Crypt-Tea v2.12 72: Crypt-Tea_JS v2.15 73: Crypt-Tea_JS v2.15 74: Crypt-TripleDES v0.24 75: Crypt-TripleDES v0.24 76: Crypt-Twofish v2.12 77: Crypt-Twofish v2.12 78: Crypt-Twofish v2.12 79: Crypt-Twofish_PP v0.17 80: Crypt-Twofish_PP v0.17 81: Filter-Crypto v1.17 82: Filter-Crypto v1.17 この辺から適当なモジュールを見繕って使ってみるのが よいのではないでしょうか。 Amazon.co.jp: 暗号技術入門-秘密の国のアリス: 本: 結城 浩 http://www.amazon.co.jp/gp/product/4797322977 とりあえずこの本ででも暗号のお勉強をしておいた方が 大怪我しないですむと思います。

kinoshita8
質問者

お礼

アドバイスありがとうございます。 すみません、モジュールというものが良くわからないので、 勉強しないといけませんね。

  • perlerz10
  • ベストアンサー率40% (4/10)
回答No.1

パスワードの文字数を多くした方が安全性が増すというのは単に「数打ちゃ当たる的」認証突破を考えた場合に少々有効なだけです。 また、いくら複雑に暗号化しようとも、メンバー認証時には再度入力されたパスワードを登録時と同じように暗号化処理して、すでにあるメンバーデータのパスワードと照合するわけですから、いってみれば「ごくろうさん」的なことでしかないかもしれません。 むしろ、照合処理を隠すための方法を考えた方が良いと思います。

kinoshita8
質問者

お礼

アドバイスありがとうございます。 やはり、効果の見込めない処理でしたか…。 >>照合処理を隠すための方法を考えた方が良いと思います。 とは具体的にはどういったものですか? 保存用ファイルの拡張子をcgiにするなどのことでしょうか? 他に何かあれば、教えてください。

関連するQ&A

  • php パスワード 暗号化

    phpの会員サイトにてパスワードの暗号化を実装したいと思い、投稿させていただきました。 会員の人はパスワード変更→暗号化でDBに登録。 変更したパスワード(暗号化されている)でログインという流れを作りたいのですが、 暗号化でDBに登録まではできましたが、ログイン認証で一致せず困っております。 どなたか教えていただけないでしょうか? 例: <input type="password"name="password" value="1234"> $pass = $_POST[pass]; $password = crypt($pass); $passwordをDBに保存。 その後ログアウトし、ログインのパスワードで1234を入力すると「一致しません」となります。 login認証の際にどのように実装してよいのかわからず困っています。 また、上記の内容にてセキュリティ上に問題がありましたらご指摘お願いします。

    • 締切済み
    • PHP
  • cryptで暗号化する

    .htaccessのベーシック認証を 登録型みたいな風にして使用したいと思うんですけど、 .htpasswdファイル内に記入する ID:この部分(パスワード) をcryptで生成するようなのですが、各サイトで説明しているようにやってもできません。 どうすればきちんと暗号化できるのでしょうか? よろしくお願いします。

  • crypt以外の暗号化の方法ってあるのでしょうか

    cryptで複数の文字列を暗号化した場合、暗号化した後の文字列が同じになる場合がありますので困っています…。 phpのmd5のような関数はないのでしょうか。

    • ベストアンサー
    • Perl
  • 暗号化の計算式

    cryptの暗号化についてなのですが同じ特定の文字列を暗号化させても 毎回違う結果になりますがどのような計算式でこのような結果になる のかわかりやすく教えて下さい。 また、他にも様々な暗号化の方法があると思いますが毎回結果が異なる 暗号化方法の計算式もあったら教えて下さい。 よろしくおねがいします。

  • どうやって暗号化しているか分かりません

    あるホームページのツール(PHPで作られています)で、 「1234567890」を暗号化すると「MTIzNDU2Nzg5MA」に変換されるのですが、どの関数を使用して暗号化しているか分かりません。 ランダム生成ではなく固定のようですがMD5などとはまったく違う暗号なので・・ どなたか分かる方いませんでしょうか?回答宜しくお願いします。 また他の文字列も暗号化してみましたがどの文字列も変換するとアルファベットの大文字小文字が非常に多くなります。

    • ベストアンサー
    • PHP
  • 8文字以上の文字を暗号化する方法

    Apache1.3.37+PHP5.2.4+MySQL51.22のレンタルサーバでWEBコンテンツを作っています。 フォームから入力されたパスワードを、DBに格納する際、暗号化したいと思います。 MD5やsha1やcryptなどいろいろあるのですが、8文字を超える文字の暗号化ができないようです。 8文字を超える暗号化はどうすればいいのでしょうか? よろしくお願いします。

    • 締切済み
    • PHP
  • このプログラムどうやったら??

    引数として受け取った文字列を逆順にした文字列に変換する関数なんですけども、全くわかりません。教えていただけませんか?? つまりは、キーボードから入力した文字列を逆順に表示させるってことなので、 void str_reverse(char src[]) を使えばいいのかと思うのですが、、、 Osaka Dome→emoD akasO みたいな感じなんですけれども。。。 お願いします!

  • cryptの動作

    cryptがサーバーによって動作が異なるというのはありうるでしょうか。 cryptが使えないサーバーがあるというのは聞いたことがあるのですが、 if(!&decry("abcd" ,$in{'pass'})){print "不正";} のときに$in{'pass'}に何も入ってない(つまり"")のときになぜか&decryの返り値が1になるサーバーがあるようなのです。しかもおかしなことに、$in{'pass'}になんらかの文字が入っていると"不正"という文字がでるそうなのです。(しかし「abcd」の暗号化文字列がくると不正とは表示されない) しかし私の環境(WinXP【phpdev4 + Active Perl】 と @nifty)では、そんなことはありません。$in{'pass'}=""; でもちゃんと不正と出ます。 私が使っている暗号化と、照会の処理の関数は以下の通りです。 ********************************************** sub encry { srand(); @salts = ( "A".."Z", "a".."z", "0".."9", ".", "/" ); $salt = $salts[int(rand(64))] . $salts[int(rand(64))]; return crypt($_[0], $salt); } sub decry { return($_[1] eq crypt($_[0], $_[1])); } ***********************************************

    • ベストアンサー
    • Perl
  • CHAPとOTPの違い

    こんばんは。 CHAPとOTPの意味の違いについて教えてください。 IT用語辞典(http://e-words.jp/)によると CHAPは・・・ まず「チャレンジ」と呼ばれる乱数文字列をサーバからクライアントに送る。クライアントはこれを元に自身のパスワードを暗号化して返す。サーバはクライアントのパスワードを記憶しているので、同様の暗号化をして、その結果とクライアントから返された暗号とを比較することでユーザの認証を行なうことができる。 OTPは・・・ まずサーバが端末に認証文字列の「種」となるランダムな文字列(「チャレンジ」と呼ばれる)を送信する。  ユーザは自分しか知らない秘密のパスワードを端末に入力する。端末に備えられたソフトウェアがサーバから送られてきたチャレンジ文字列とユーザが入力したパスワードを一定の手順に従って演算し、生成された結果(「レスポンス」と呼ばれる)をサーバに送信する。 とほぼ同じ意味に受け取れる内容がでてきます。 しかし一般にCHAP=OTPとは聞いたことがありません。 どのように違うのでしょうか?

  • パスワード暗号化について(CGIスクリプト)

     現在記事削除処理の、キー暗号化と解読について勉強しているんですが、他の方が書いたソースを読んでもさっぱり意味不明です。技術評論社さんのリファレンスを参考にしてるんですが、どうも載っていないワザが使われているらしく・・・。  まずは暗号化処理です(とある有名ソースから抜粋)。 @SALT = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $SALT[int(rand(@SALT))] . $SALT[int(rand(@SALT))]; $encrypt = crypt($password, $salt) || crypt ($password, '$1$' . $salt); 問題は$encryptなんですが、||演算子は、要するに左オペランドの保険みたいなものなんでしょうか?まず、左オペランドが偽になる、ということ自体が分かりません。結果が偽になる、というのは0を返すということでしょうか?  crypt関数が処理を失敗する(?)、ということでも偽になるかもしれないんですが、暗号化処理を失敗などということがあるのでしょうか?  次に、ひとまず左オペランドが偽だった場合ですが、右オペランドに関して、暗号化キーが「$1$xx」の5文字ですよね。暗号化キーは2文字までしか評価されないから、結局これは「$1」と変わらない気がします。というより、まずなぜ「$1$」なんでしょうか?そして、合計5文字の意味は・・・?謎は深まるばかりです。  質問の長さが800文字を超えてしまうので、前半はここで切らせていただきます。  後半は「パスワード解読について(CGIスクリプト)」にて質問させていただいています。  どうかよろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう