令和6年春期試験『午後試験【問4】』

管理人  
(No.1)
令和6年春期試験 午後試験【問4】についての投稿を受け付けるスレッドです。
2024.4.21 00:00
まさかのさん 
(No.2)
マネジメント系の問題かな?と思って問4見たら、セキュアプログラミングでしたね。びっくり。
2024.04.21 14:36
しんさん 
(No.3)
私もやられました  4を選ぼうと思ったら、プログラミングなんて。。。(笑)
2024.04.21 14:49
寝るさん 
(No.4)
自分も問題用紙だけ見て4に丸つけたけど、問題文みて速攻丸消しましたw
2024.04.21 15:07
うっちさん 
(No.5)
3問ぐらい解いてちゃんと見たらセキュアプログラミングで途中から問1に変更しました。先入観で時間無駄にした〜
2024.04.21 15:19
疲れたさん 
(No.6)
問4を選択した人は少ない感じですかね。

プログラミングと言っても、何かの攻撃の対処というよりかは、業務アプリケーションにおける、要求仕様にマッチしているかという問いだったので、問3ではなく問4選択しました。でも、自信なし…。
2024.04.21 15:50
やれるだけはやった!さん 
(No.7)
まったく自信なく、当てずっぽうもありますが、私の解答です。
採点・指摘・コメントいただけると嬉しいです!

1.
(1)イ
(2)personal
(3)4
2.
(1)7
(2)NosuchAlgorithmException
(3)
システム運用者
  データ:氏名、住所、電話番号
  場所:ウ
システム開発者
  データ:氏名、住所、電話番号、メールアドレス
  場所:オ
(4)SHA-2
(5)例外をthrowして以降の処理を中断する
(6)finally
(7)イ
2024.04.21 16:30
ムーンライトながらさん 
(No.8)
全体的に自信ないです。とりあえず全部埋めたというレベルです。

1.
(1)ア
(2)develop(personalだと権限多いかなと思った)
(3)4
2.
(1)5
(2)NoSuchAlgorithmException
(3)
システム運用者
  データ:氏名、住所、郵便番号、メールアドレス
  場所:エ
システム開発者
  データ:氏名、住所、郵便番号、メールアドレス
  場所:オ
※ 郵便番号は重要情報の「住所」に含まれるのか迷いました。
(4)SHA-2
(5)
this.userId = null;
this.password = null;
throw e;
(6)finally
(7)ウ
2024.04.21 16:43
やれるだけはやった!さん 
(No.9)
>(2)develop(personalだと権限多いかなと思った)
私も権限多いかな?と迷ったのですが、developは「開発環境と本番ログサーバ」しかアクセスできないし、、、と思いました。

>※ 郵便番号は重要情報の「住所」に含まれるのか迷いました。
私も迷いました!でも、「郵便番号」と「住所」は別物と考えました
2024.04.21 16:50
たまさん 
(No.10)
(1)ア
(2)personal
(3)4
2.
(1)7
(2)NoSuchAlgorithmException
(3)
システム運用者
  データ:氏名、住所、郵便番号、メールアドレス
  場所:エ
システム開発者
  データ:氏名、住所、郵便番号、メールアドレス
  場所:オ
(4)SHA-2
(5)プログラムの停止
(6)finally
(7)ア
最後はソルトが平文で入ってないと複合できないと思いアにしました。
2024.04.21 16:51
まさかのさん 
(No.11)
私も上のお二人と似通った回答です。

設問2(3)
コードのSQLが省略されているので、郵便番号以降もセットしてるよね?そうだよね?と不安になりました…。

設問2(5)
スローの綴りをど忘れしてカタカナで書いちゃいました。普段コード補完に頼っているせいですね。
2024.04.21 16:53
さくさん 
(No.12)
私も郵便番号を迷ったのと、パスワードが平文で保存される可能性があるのでパスワードを入れるか迷いました、パスワードも買いてしまったorz
2024.04.21 16:53
Kingshuさん 
(No.13)
自分の解答は以下です。finnalyはミスしました。


設問1
(1)ア
(2)personal
(3)4
設問2
(1)d. 5
(2)e. NoSuchAlgorithomException
(3)
    列名
      ・氏名
      ・住所
      ・電話番号
      ・メールアドレス
      ・パスワード
    場所:エ

      ・氏名
      ・住所
      ・電話番号
      ・メールアドレス
      ・パスワード
    場所:オ
(4)f.SHA-256
(5)g. throw new RuntimeException("system error")
(6)h. catch(Exception e)    //このミスした確かにfinnaly
(7)イ、オ
2024.04.21 17:07
ムーンライトながらさん 
(No.14)
設問2-(7)は イ と迷いましたが、
下線部の前に「レインボーテーブル攻撃を受けたときに攻撃が成立する」とあったので、
複数回ハッシュ化するのかなと思って「ウ」を選びました。
やっぱり復号できないから イ でしょうか?
2024.04.21 17:14
たまさん 
(No.15)
この投稿は投稿者により削除されました。(2024.04.21 17:31)
2024.04.21 17:31
たまさん 
(No.16)
設問2の(5)においてそこから例外をthrowするとコンストラクタの宣言にthrowsにしないとコンパイル通らなくないですか?
コードで書くならSystem.exit(1);なのではないでしょうか
2024.04.21 17:31
ムーンライトながらさん 
(No.17)
>設問2の(5)においてそこから例外をthrowするとコンストラクタの宣言にthrowsにしないとコンパイル通らなくないですか?

確かに。throw e; だとthorwsがないからコンパイルエラーになりますね。
コード補完に頼りすぎていて忘れていた。 orz
2024.04.21 17:52
さぼりーまんさん 
(No.18)
(4)はAESと書いたけどSHAかも
  コーディング離れてると忘れますね
(5) throw eかとおもいましたが引っ掛けありそうな感じがして言葉で同じことを記載しました。
2024.04.21 17:55
ななしさん 
(No.19)
(4)はsha2に含まれてるのならええんちゃうんか?
といういみでsha256かsha512でもいいんじゃないかなと
2024.04.21 18:09
yesさん 
(No.20)
この投稿は投稿者により削除されました。(2024.04.21 18:28)
2024.04.21 18:28
ななしさん 
(No.21)
>>(4)はsha2に含まれてるのならええんちゃうんか?
といういみでsha256かsha512でもいいんじゃないかなと

とおもってjavaの実装例みたらsha2の場合具体的な値かかんとあかんのか?
2024.04.21 18:22
yesさん 
(No.22)
SHA-256をSHA256と書いてしまった。
finallyをfinalyと書いてしまった。
などは不正解になるんでしょうか?
部分点は貰えるのでしょうか…?
2024.04.21 18:28
たまさん 
(No.23)
SHA-2の書き方はSHA-2ファミリーにたくさんいるんできちんとしないと実装できないんですね。
業務でjavaやってますが知らなかったですorz
2024.04.21 18:50
opus25bさん 
(No.24)
問2 (3), システム運用者のやつですが, ユーザIDも入りますかね..?
ログファイルの権限の話がちょろっと出たのと, 
csvファイルの中にユーザIDが含まれるので特定できてしまう情報になる..と考えました
2024.04.21 20:22
jataroさん 
(No.25)
(4)について

Oracle公式ドキュメントには、Messeageダイジェストのインスタンス生成時に指定できるアルゴリズム名は以下の通りらしいです。

MD2, MD5, SHA-1, SHA-224, SHA-256, SHA-384, SHA-512

もしかしたら"SHA-2"だと×?
2024.04.21 20:51
みよじさん 
(No.26)
ChatGPTに訊いてみました。設問1(2), 設問2(3)を含めて自分の回答とはいくつも相違がありますが、なんだか人間が要らなそうな立派な答えが返ってきました。

Q1-1. 【データ連携機能のセキュリティレビュー】において、[a]には「システム運用担当者」が適切であることが示唆されています。これは、batchappuserが本番バッチサーバへのアクセス権を持っており、CSVファイルに重要情報が含まれるため、不正アクセスのリスクがあります。バッチ処理の運用を担当するため、[a]はシステム運用担当者になります。

   解答: ア

Q1-2. 【データ連携機能のセキュリティレビュー】で指摘された問題に対処するために、batchappuserの所属グループを変更する提案がありました。batchappuserに対してより制限的なグループへの変更が求められており、表3において「personal」グループが本番環境へのアクセス権を持ち、重要情報にアクセスする可能性があるため、このグループに変更することでセキュリティが向上します。

   解答: personal

Q1-3. CSVファイルの暗号化と復号を行うプログラムに関しては、暗号化を行うのは注文データのCSV出力を行うバッチ処理であるため、表4に基づきNo.3の「注文データ CSV 出力バッチ処理」で暗号化を追加し、受け取ったCSVファイルを読み込んでDBを更新するプログラムはNo.4の「注文データ CSV 取込みバッチ処理」で復号処理を追加することが適切です。

   解答: 4

Q2-1 本文中の[d]で指摘されている行は、例外が発生した場合にパスワードが平文で保存される可能性がある行です。この場合、ハッシュ化処理が失敗した場合を想定しているため、ハッシュ関数のインスタンス化を試みる行(5行目)が該当します。

   解答: 5

Q2-2 本文中の[e]は、例外が発生すると述べられています。図3の8行目ではNoSuchAlgorithmExceptionがキャッチされています。

   解答: NoSuchAlgorithmException

Q2-3a システム運用担当者がアクセスできてしまう情報は、図3の22行目と23,24行目にて出力されているユーザーマスターテーブルの全ての列が含まれます(ユーザーOID、ユーザーID、パスワード、氏名、郵便番号、住所、電話番号、メールアドレス、作成日時、更新日時)。この情報が出力される場所は、開発ログサーバのAPログを保存したテキストファイルです。

   解答: ア

Q2-3b システム開発者がアクセスできてしまう情報も、図3の22行目と23,24行目にて出力されているユーザーマスターテーブルの全ての列が含まれます(ユーザーOID、ユーザーID、パスワード、氏名、郵便番号、住所、電話番号、メールアドレス、作成日時、更新日時)。この情報が出力される場所も、開発ログサーバのAPログを保存したテキストファイルです。

   解答: ア

Q2-4 図4中の[f]には、以前よりセキュアなハッシュ関数名が入る必要があります。CRYPTREC 暗号リスト(令和5年3月30日版)の推奨されるセキュアなハッシュ関数の一例として「SHA-256」が適切です。

   解答: SHA-256

Q2-5 図4中の[g]で例外が回復不能な場合、適切な処理はアプリケーションが安全に停止または異常終了することを保証する処理です。例えば「throw new RuntimeException("Unable to hash password", e);」とすることで、システムの安全を確保します。

   解答: throw new RuntimeException("Unable to hash password", e);

Q2-6 図4中の[h]には、PreparedStatementを適切にクローズする処理が必要です。例外が発生した後にリソースを正確に解放するためのコードは以下のように記述します。

   解答: finally

Q2-7 図4の6,7行目のレインボーテーブル攻撃に対する脆弱性を解決するためには、ソルトを使用したハッシュ化が必要です。適切な修正コードは、「イ」です。
byte[] hashByte = mdObj.digest((salt + this.password).getBytes());
this.password = String.format("%x", new BigInteger(1, hashByte));
   解答: イ
2024.04.21 20:53
あまんださん 
(No.27)
>opus25bさん(No.24)  
重要情報に入っていないので、違います。

「パスワード」が抜けている解答が多いですね。
ハッシュ化されているからセーフとでも思ったのでしょうか。
「パスワード」は重要情報に該当し、重要情報にはアクセスしてはならないとあります。
素直に読めば、「パスワード」はアクセスしてはならないと読めますよね?
百歩譲って、ハッシュ化されていればセーフだとしても、
修正前のプログラムに対する指摘事項なので、
パスワードがハッシュ化されていない可能性があることも考慮すると、
やはりアクセスしてはならないとしか読めないです。

全て書け系は完答で点数が得られます。
この問題は4点✕2から6点✕2までの可能性があり、
「パスワード」が抜けた方々は、8点から12点までの失点です。
不合格の大きな一歩を踏み出したと言えるでしょう。
2024.04.21 20:59
ななしさん 
(No.28)
>>もしかしたら"SHA-2"だと×?

認識の通りjavaの仕様的にもoracleリファレンス的にも具体的にsha-256だったりsha-512って書かないとプログラムが認識しないとおもうから×かもしれないね・・・
2024.04.21 21:10
シータさん 
(No.29)
CRYPTRECの方にも、SHA-256、SHA-384、SHA-512と個別に書いてありますしねぇ
2024.04.21 21:29
nokiさん 
(No.30)
設問2の(3)のパスワードについてはいくらでも解釈可能なな気がしていて正解が思いっきりバラけそうですね。なんとなくですが部分点も入る気がします。。。
2024.04.21 21:38
ISKさん 
(No.31)
自分の解答は以下です。


設問1

(1)ア
(2)personal
(3)4

設問2

(1)5
(2)NoSuchAlgorithmException
(3)
◆システム運用担当者
データ:パスワード、氏名、住所、電話番号、メールアドレス
場  所:エ


◆システム開発者
データ:パスワード、氏名、住所、電話番号、メールアドレス
場  所:ア

(4)SHA-2
(5)プログラムを異常終了する
(6)finally
(7)ア

※「ユーザーマスターテーブルの定義に変更はないものとする。」とあるので、
  ハッシュ化する"前"のソルトをパスワードと同じ項目に格納される「ア」か「エ」に絞られる。
  「エ」はパスワードのみでハッシュ化しており、
  テーブル格納後の33バイト以降の文字列が修正前と変化ないため修正後として不適当。
  よって答えは「ア」と思われる。


【感想】
設問2(3)は5行目で例外が発生した場合はthis.passwordが平文のままになるので記述したのですが、ここでは例外考えなくて良かったのかも?(設問2(1)ですでに触れてるので、、、

設問2(4)はみなさん言われてるようにSHA-2ではなく、SHA-256,SHA-512 のように具体的に書かないとダメそうですね...
2024.04.21 23:41
あらまさん 
(No.32)
大混乱の中、何を思ったか当て勘でAES-256って書いたわ
2024.04.22 01:24
さぼりーまんさん 
(No.33)
設問2(3)の個人情報の件ですが、たしか郵便番号は単体だと個人情報にならないけれど氏名と合わせると個人特定可能として扱われたはずなので、今回は対象になると思います。
うろ覚えですが、、、
2024.04.22 12:34
あいさん 
(No.34)
「重要情報にアクセスしてはいけない」が仕様で、郵便番号は重要情報に該当する項目に入っていなかったので外しました
2024.04.22 12:52
ななしさん 
(No.35)
設問2の(3)の、システム運用担当者の方にパスワードは書かなくていいかなと。
ハッシュ計算のプログラムをデバッグできるわけではないので。

逆に、システム開発者の方では必要なのかな。
コード知ってればログから引っ張ってきてリバースすればいいし。
2024.04.22 15:08
ごんさん 
(No.36)
>設問2の(3)の、システム運用担当者の方にパスワードは書かなくていいかなと。
ハッシュ計算のプログラムをデバッグできるわけではないので。

図2の24行目で log.debug("InsertData:" + this.toString()); 
としているので、運用担当者が閲覧可能なログにパスワード(ハッシュ値)が含まれるのかな?と思ったので私はパスワードも書きました。

(log.debugでのログにthis.toString()を使用していることから、toString()が適切にオーバーライドされている前提だと判断しました。)
2024.04.22 15:59
名無しさん 
(No.37)
設問2の(7)はアですよね。
自分もISKさんと同じ選定理由です。
2024.04.22 16:47
名無しさん 
(No.38)
ハッシュ化した値を“復号する“と書いてる方がこのスレに何名か居るのが気になりますね…
2024.04.22 16:56
たまごさん 
(No.39)
設問2の(7)は
※「ユーザーマスターテーブルの定義に変更はないものとする。」とあるので、ハッシュ化したパスワードに32バイトのsaltを連結してDBに保存しようとすると、文字数オーバーでエラーになるのかと思い、イにしました。
同じハッシュ関数でハッシュ化するなら、パスワード列のデータ型は固定長かなというのは考えすぎでしょうか。
2024.04.22 17:44
GinSanaさん 
SC ブロンズマイスター
(No.40)
この投稿は投稿者により削除されました。(2024.04.22 18:05)
2024.04.22 18:05
GinSanaさん 
SC ブロンズマイスター
(No.41)
この投稿は投稿者により削除されました。(2024.04.22 18:16)
2024.04.22 18:16
GinSanaさん 
SC ブロンズマイスター
(No.42)
元のパスワードにソルトを足してハッシュ化するのだから、パスワードに対する桁長は変わらないけど、
そういやそのソルトはどこにしまっとくのか?(ログインの処理に触れないから、今回は気にしなくていいの?)ということは思いました。
テーブル列の桁長が書いていないから、sqlite3のTEXT型みたいな入るだけ入るよみたいなものを想像するのがよいように思います
2024.04.22 18:18
たまごさん 
(No.43)
>元のパスワードにソルトを足してハッシュ化するのだから、桁長は変わらんでしょうね。

アの選択肢のように、ハッシュ化後のパスワードに平文のソルトを付け足すと桁長が変わってしまうことに言及しておりました。

どう解釈しようが結局はIPAが想定していたものと違っていれば間違いなので考えるのはやめにします。
2024.04.22 18:19
名無しさん 
(No.44)
>「ユーザーマスターテーブルの定義に変更はないものとする。」

問題内にパスワードカラムの文字長が定義されていないので、この注釈は「salt用のカラムを追加しない」という意図に読めます。

とすると、saltは毎回ランダム生成されるものなのでパスワードにくっ付けて保持することを想定した問題なんだろうな、と思いました。
2024.04.22 18:27
荒漉檸檬さん 
(No.45)
「ユーザマスターテーブルの定義に変更はない」は、
テーブル項目として「ソルト」は追加しないよ?って言っているように解釈しました。
addUserで毎回変更されるsaltを平文で保存していないと一致確認の処理(復号)ができないので、平文のまま保存するアorエで絞り込みました。
ソルト処理のセオリーとしては、ソルト+パス平文でハッシュ値をとるなので、アかなと。
それにしてもsaltのスコープどこやねんとはツッコミいれたくなりましたが。
2024.04.22 18:28
GinSanaさん 
SC ブロンズマイスター
(No.46)
この投稿は投稿者により削除されました。(2024.04.22 18:31)
2024.04.22 18:31
GinSanaさん 
SC ブロンズマイスター
(No.47)
そうなると、ログインのときは入力パスワードをハッシュにして前方一致みたいにするんですかね?
2024.04.22 18:35
ISKさん 
(No.48)
>そうなると、ログインのときは入力パスワードをハッシュにして前方一致みたいにするんですかね?

横からで失礼します。
ログイン処理を想定するとしたら以下のような感じになるのではと思います。

①ユーザマスターテーブルからパスワード列の値を取得

②①で取得した値の先頭から32バイト分と、
利用者が入力したパスワードを結合した上でハッシュ化

③①で取得した値の33バイト目以降の文字列と②を比較、一致していればログイン成功
2024.04.22 18:49
GinSanaさん 
SC ブロンズマイスター
(No.49)
>ISKさん(No.48) 
ありがとうございます。どこからソルトを取るかの問題ではあるのですが、ソルトはせめて別の列で管理しときたいですね。
2024.04.22 19:19
DSさん 
(No.50)
>アの選択肢のように、ハッシュ化後のパスワードに平文のソルトを付け足すと桁長が変わってしまうことに言及しておりました。

元々はSHA-1(20バイト)だったものをSHA-256(32バイト)などに変更するので、桁長はアルゴリズムの変更の時点ですでに変わっています。
アルゴリズムの変更時に桁長の制限はなかったので、パスワード列の桁長には余裕があるという解釈でいいと思います。
2024.04.22 21:52
たこやきさん 
(No.51)
設問2の(2)はNoSuchAlgorithmExceptionがどういう例外か答えろってことかなと思い「アルゴリズム参照での例外」と書いたのですが、流石に×でしょうか。

また、設問2の(1)は5と7の2つの意見がありますが、結局どちらが正しいのでしょう?有識者の方居ませんでしょうか?
2024.04.22 22:00
みみっくさん 
(No.52)
元々はSHA-1(20バイト)だったものをSHA-256(32バイト)などに変更したときに、32バイトを上限に設定してたら、アだと桁数オーバー
ユーザー定義は、salt追加前に上限設定しているので、そこから変えてないという意味では矛盾がない
桁数オーバーのリスクがないとは言い切れないので、saltがないと対応できないなら、全選択肢がダメ

問題として不適切な要素はあるクソ問題
2024.04.22 22:02
ISKさん 
(No.53)
>また、設問2の(1)は5と7の2つの意見がありますが、結局どちらが正しいのでしょう?有識者の方居ませんでしょうか?

NoSuchAlgorithmException例外が発生するのはMessageDigestクラスのgetInstanceメソッドなので、5行目が正しいと思います。
2024.04.22 22:08
たまさん 
(No.54)
>また、設問2の(1)は5と7の2つの意見がありますが、結局どちらが正しいのでしょう?有識者の方居ませんでしょうか?

NoSuchAlgorithmExceptionの発生は指定した暗号化アルゴリズムがない時に行われるので
7と書きましたが5行目が正解だと思います。

実際に2-4の問題でSHA-2でやったらどうなるのか兼ねて
MessageDiggest.getInstance("SHA-2");とやったらそこでNoSuchAlgorithmExceptionが発生しました。
2024.04.22 22:14
たまごさん 
(No.55)
図4(SHA256でハッシュ化するように変更したコード)に対してsaltの利用を追加するよう修正するって内容でしたので、
①ユーザーマスターテーブルのパスワード列はSHA256に対応した形に定義を変更済み。
② saltはユーザーマスターテーブルとは別のテーブルに保存する。
といった前提条件を脳内で設定してしまっていました。。。
本番中はやけに妄想が働いてしまってましたが、冷静に考えると「ア」が正しそうですね。
2024.04.22 22:17
たまさん 
(No.56)
>ハッシュ化した値を“復号する“と書いてる方がこのスレに何名か居るのが気になりますね…

自分も書いていましたがパスワードの検証のことです
2024.04.22 22:18
ありさん 
(No.57)
設問1
(1)ア
(2)develop
(3)10

設問2
(1)8
(2)NoSuchAlgorithmException
(3)
◆システム運用担当者
データ:氏名、住所、電話番号、メールアドレス
場  所:エ

◆システム開発者
データ:氏名、住所、電話番号、メールアドレス
場  所:オ

(4)知らん
(5)errorを通知して処理を終了、後続処理を実行しない
(6)catch()無理
(7)ア

おいくら頂ける?
2024.04.23 02:34
馬とロバさん 
(No.58)
この投稿は投稿者により削除されました。(2024.04.23 08:32)
2024.04.23 08:32
馬とロバさん 
(No.59)
郵便番号✖️
電話番号○
2024.04.23 08:27
馬とロバさん 
(No.60)
この投稿は投稿者により削除されました。(2024.04.24 20:19)
2024.04.24 20:19
おおおくるいさん 
(No.61)
個人的に一番無難だと思う答え
住所が抜けてて草
パスワード入れてるのは好感が持てる

パスワード抜けてる答案多くてビビる
ハッシュ化有無関係ねーから

しかも今回はハッシュ化できず生パスワード入れられるリスクもあるのにアクセスさせて言い訳がねえ
2024.04.23 12:26
結局さん 
(No.62)
結局パスワードってハッシュ化自体はされるじゃなかったっけ
ハッシュ化されてるされてないに関係なくパスワードにアクセスできること自体が問題って趣旨だと思うが

まあパスワード抜いたけど俺は
2024.04.23 12:32
ななしさん 
(No.63)
大問4の話だけど、確かに要件のユーザと役割には重要情報にはアクセスしてはならないとあるけど、ログ保存部分は”どこ”に”どんな”形式で”どの”パーッミッションで保存するかしか書いてないから重要情報保存するなってのは読み取れないね。そもそも問題が重要情報にアクセスできてしまうだからログには重要情報が載ってないとだめ。
あというとプログラムの記述的に
  APログ・デバッグログ共に
  SQL: + sql ;SQL:のあとに14,15行目のSQL内容をそのまま出力
だから全部の情報が出力されて保存されることになる。でいいよね。
2024.04.23 12:37
名無しさん 
(No.64)
>だから全部の情報が出力されて保存されることになる。でいいよね。

合ってる。
だからハッシュ化されたパスワード含め、重要情報に指定されてるカラム名を書き出せばOK
2024.04.23 14:03
ガバガバさん 
(No.65)
2-5、「return e」とかいうガバガバコード書いたんだけど部分点貰えねえかな
2024.04.23 14:05
馬とロバさん 
(No.66)
2-5については、コンパイルエラーが発生しないことは前提として、
フェイルセーフの考え方として、強制終了
フェイルソフトの考え方としては、変数null化もありかなと個人的に思う。
2024.04.23 17:46
scさん 
(No.67)
暇だし解説していこうかなー
2024.04.23 20:58
ペンネさん 
(No.68)
6.はFinallyではなく、

catch(OutOfMemoryException e)

ではないでしょうか。メモリリークの可能性と言ってるので。
2024.04.23 21:34
scさん 
(No.69)
> ペンネさん(No.68)

6 は finally が妥当ですね。

仮に「catch(OutOfMemoryException e)」とすると、正常時に psObj.close が明示的に呼ばれないので微妙かなと思います。
2024.04.23 21:43
jataroさん 
(No.70)
2-5、「this.password = ""」で空文字入れちゃったんですけど部分点もらえますかね...笑
2024.04.23 21:47
scさん 
(No.71)
> jataroさん(No.70) 

基本的には「プログラムを異常終了 (実行時例外を投げる) 」が妥当な回答なのかなと思います。

もし、this.password = "" (パスワードを空文字列) とした場合、全てのユーザがパスワード無しで登録しているというようなことになってしまうので、ダメそうな気がします。

例えば、

- ユーザが自分の設定したパスワードでログインできない
- 誰でもパスワード無しでログインできる

というバグが埋め込まれてしまいます。
2024.04.23 21:57
jataroさん 
(No.72)
> scさん(No.70) 

さすがに厳しいですよね笑

解説ありがとうございます。
2024.04.23 22:04
おにきさん 
(No.73)
パスワード無しだと、別のエラーで結果的に処理落ちしそうだけどね
2024.04.23 22:56
scさん 
(No.74)
> おにきさん(No.73) 

問題に記載されているソースコードを読めばわかりますが、別のエラーにはなりません。
2024.04.23 22:59
しょうゆさん 
(No.75)
4は「SHA256」と解答してしまったのですが、実際のコードでハイフンなしで指定した場合はエラーになりますか?

5は「利用者の登録を行う一連の処理を強制的に終了させる」と解答しましたが、正答または部分点は貰えそうでしょうか?
2024.04.23 23:09
scさん 
(No.76)
> しょうゆさん(No.75) 

Java のプログラミングにはあまり詳しく無いのですが、リファレンスを見る限りSHA256 ではエラーになると思われます。また、一般的にハイフンを省略する形式をドキュメントで見ることは無いので回答としては不十分と思われます。

docs.oracle.com/javase/jp/17//docs/specs/security/standard-names.html#messagedigest-algorithms

「利用者の登録を行う一連の処理を強制的に終了させる」であれば、部分点がもらえる可能性はありそうですね。(強制的に終了というのはキーワードな気がします)
2024.04.23 23:17
しょうゆさん 
(No.77)
>scさん
ご回答ありがとうございます。

普段業務で使うC#の関数だとSHA256表記だったので、それに引っ張られてしまいました。
JAVAのプログラミングでエラーになるなら、意図を汲み取って部分点とかも無さそうですね。
2024.04.23 23:31
scさん 
(No.78)
> しょうゆさん(No.77) 

なるほど、C# 詳しくなくてすみません。確かに調べてみると SHA256 ですね。(C# では、文字列ではなくクラス指定なので存在しない値を指定した場合、コンパイルエラーになりますね。モダンな言語はだいたいこういう傾向にありますね)

learn.microsoft.com/ja-jp/dotnet/api/system.security.cryptography.sha256?view=net-7.0

僕が問題作成者で、そういう主張があれば正解にします。(この試験では難しいかもしれませんが・・・)
2024.04.23 23:35
しょうゆさん 
(No.79)
>scさん
いえ、ご丁寧にありがとうございます。

まあでもここ以前に
6を「finally」ではなく「finaly」って書いてしまったり、
7を「イ」にしていたりするので、
いろんな意味で勉強不足でした。笑
2024.04.23 23:46
scさん 
(No.80)
> しょうゆさん(No.79) 

(7) は実務の感覚と解くと (イ) にしてしまう気持ちはわかります・・・。
問題をよく読まないといけないですね。
2024.04.23 23:51
おにきさん 
(No.81)
SHA-1
の1を256に変えるだけのはずなのにハイフン漏れも結構多いですね
最初は問4の平均点6割くらいかと思ってましたが5割ないくらいですかね
ちょっと意地が悪い問題多いです
2024.04.24 00:30
ミスター珍さん 
(No.82)
設問7について、パスワードのハッシュ値化について問われているよりsalt値の保管の方法を問われているように感じました。
私はアかイかを迷ったんですが、saltが暗号的な文字でなかったら、salt+passハッシュ値が流出したときにsaltが解読されて、辞書攻撃に用いられそうだったのでイにしました。
教本にはpass+saltをハッシュ化するとしか書いてなかったのですが、salt値の保管や、どのようなsalt値を使うか疑問を持ちました。

実装経験のあるかたに質問です。
・saltはどのような文字を使いますか
・saltはどのように保管しますか

設問としては、このあたりの前提があった上の問題にしてほしかったです。
前提が自由なら、今回の場合だったらsaltにユーザ0IDや郵便番号を使うとかして、イの方法で良さそうではないかなと思いました。
2024.04.24 08:01
ぽぽろんさん 
(No.83)
saltの保管場所がパスワードそのものなんですわ
これがいやらしいところ
一応saltと生パスワードでハッシュ化してるので、saltが桁数から解読されて漏れてもいいのでしょう
よりセキュアなのは当然イですが、saltの保管が必要なのでアとせざるを得ないという感じです
レインボー攻撃の対策が分かってるかをとう問題にすればいいのに、と思いますね。
2024.04.24 08:18
ぽぽろんさん 
(No.84)
個人的には、勝手に桁数32桁増やす改修するのは、データ定義変更しなくてokな根拠が分かりませんね
難癖に近いですが、saltの作り方がユーザIDを組合せた規則的に異なる文字列なら、別にイでも良いような気もします
2024.04.24 08:25
馬とロバさん 
(No.85)
この投稿は投稿者により削除されました。(2024.04.24 21:34)
2024.04.24 21:34
うーむうさん 
(No.86)
パスワードは必須
なぜなら、ハッシュ化しててもレインボーアタックされるリスクは残る
しかも修正前のコードに対する指摘なので、生パスワードが入れられる可能性もある
生パスワードは当然アクセス禁止でしょ
2024.04.24 09:17
名無しさん 
(No.87)
パスワードは必須ですよ。

>実装経験のあるかたに質問です。
>・saltはどのような文字を使いますか
>・saltはどのように保管しますか

・今回のような乱数
・パスワードが保管されているDBテーブルとは異なるテーブル

普通実装する場合にはsaltをパスワードと一緒に保管するようなことはしないと思います。

ただ、今回は保管場所に関する前提条件が無いんです。なのに、「saltは一度きりしか生成されない」という条件が書いてあります。

これは暗に「ハッシュ化したパスワードはどうやって突合するのか?」を聞いているのではないか、と思いました。
2024.04.24 09:51
シータさん 
(No.88)
自分が過去見てきたシステムを参考にすると、saltはハッシュ値と並べて保管するのが一般的かと思います
さらに安全性を高めたい場合は、固定値のpepperをDBとは別領域で管理してsalt+pepperでハッシュ化する場合が多いかと
2024.04.24 12:58
現役SEさん 
(No.89)
2(4)で「SHA-512」と書いたのは少数派ですかね。。。
暗号強度を深読みしすぎました。
CRYPTREC暗号リストには載ってるので正解となるとは思いますが。
2024.04.24 15:59
jybniiiさん 
(No.90)
パスワードの記載漏れたら、バツだろうね
2問あるから8点の2倍で16点減点かな
かわいそう
2024.04.24 17:15
馬とロバさん 
(No.91)
この投稿は投稿者により削除されました。(2024.04.24 18:09)
2024.04.24 18:09
馬とロバさん 
(No.92)
この投稿は投稿者により削除されました。(2024.04.24 21:29)
2024.04.24 21:29
うわぁぁぁぁあさん 
(No.93)
itecはパスワードいらないって言ってる悲
2024.04.24 18:35
Kingshuさん 
(No.94)
>>itecはパスワードいらないって言ってる悲

先頭32倍とソルド+32バイトのパスワードとソルドのハッシュをDBに保存しているにも関わらず、パスワードが入らないのは腑に落ちないですね。
ハッシュ値が漏れたら、ソルドと一緒に攻撃に利用されるのではないかと思っています。
最後の選択肢はアを選択していますね
2024.04.24 18:55
うわぁぁぁぁあさん 
(No.95)
パスワードの有無で問4の出来が結構変わってくるからしんどいなぁ
選択問題じゃないから最低でも4点はあるだろうし-8以上かぁ泣きそう悲
2024.04.24 19:03
きんぺぷーさんさん 
(No.96)
パスワードがアクセスしようがないというのであればitecの通りなんだが、今回はアクセスできる上に、平文格納のリスクもあるとのことなので、許容できる要素がないんだが
しかも、レインボーアタックにも言及してて、ハッシュ化すら微妙という論調やぞ
2024.04.24 19:16
名無しさん 
(No.97)
itecの回答見てきましたが、お粗末な答えもあるのであまり信じられないですね…
チェック例外って何のことでしょうか。
2024.04.24 19:55
きんぺぷーさんさん 
(No.98)
やっぱり安心安全のTAC
毎回ITECは的外れ気を衒いすぎ
2024.04.24 20:01
名無しさん 
(No.99)
> チェック例外って何のことでしょうか。
Java では、例外は「チェック例外」と「非チェック例外」に分類されるんですよね。
前者は catch/メソッド宣言に throws 例外名 の実装が必須ですが、後者はなくても良いです。

NoSuchAlgorithmException は一応チェック例外という種類に分類される例外ではあるのだけれど、
この答えでいいのか...という疑問が残ります。。
間違ってはいないけれど、かなり曖昧な答えになってしまうのでグレーな気がします。

しかも、Java では try-catch で catch するチェック例外がメソッド内で絶対に発生しない場合は、コンパイルエラーとして報告されるので、しっかり NoSuchAlgorithmException と回答する必要がある説を推しています。
2024.04.24 20:15
馬とロバさん 
(No.100)
確かにチェック例外で間違ってはいない
(省略)に発生しうる他のcatch exceptionがあるとも考えられるからね。

NoSuchAlgorithmExceptionも間違ってはいないと思う
2024.04.24 20:23
ミッキーヌチバナさん 
(No.101)
全く参考にならんな
まあ今回そもそも解答割れそうではあるが……
2024.04.25 09:31
あおいとりさん 
(No.102)
修正版のコメントに、「回復不能な例外」と書いてあったので、素直に書いてしまったわ
ソースコードではなく字句でという部分にも惑わされた
まあ字句にコードも含まれるならこのスレの通りかもしれんが
2024.04.25 09:39
ミスター珍さん 
(No.103)
問7について教えて頂いてありがとうございました。
salt+ハッシュで保存するものであると理解するようにします。
「ユーザーマスターテーブルの定義変更はない」という文面をどうとるかですね。
ユーザーマスターテーブルの項目追加はない・・・ア
ユーザーマスターテーブルのパスワード項目の文字長定義に変更はない・・・イ

TACもITECもアだったので、イは望み薄いかなと思いますが、非常に紛らわしい問題なので温情的な措置があったらいいなと夢見ます。
2024.04.25 17:00
しょうゆさん 
(No.104)
この投稿は投稿者により削除されました。(2024.04.25 17:40)
2024.04.25 17:40
名無しさん 
(No.105)
自分は問1と問4を解きましたが、TACの方が正しそうですね
2024.04.25 17:11
GPTさん 
(No.106)
パスワードが入るか入らないかで合否が決まるぐらいギリギリだけど、まあ多分入るだろうねえ
残念
2024.04.25 17:24
しょうゆさん 
(No.107)
設問2(3)の重要情報が完答ならパスワードありなしで10点近く変わってくるので、パスワードの有無で合格が決まるといっても過言じゃないですね。。。
2024.04.25 17:28
馬とロバさん 
(No.108)
itecもtacもちゃんとした企業だから、根拠あっての解答速報だろう。

パスワードの有無は問題作ったところの正式解答例出るまで分からんね。
2024.04.25 17:35
あおくもんさん 
(No.109)
正規表現もろくに分かってないitecがパスワード無し

こりゃ勝負あったでしょう
TACの通りパスワード有が正解

というか予想配点も5点×2とは限らない
出来が悪い大問ではあるので、
10点×2で処理されるかも

そうするとパスワード抜けの答案は30点以下のスタートとなります
2024.04.25 22:11
名無しさん 
(No.110)
>10点×2で処理されるかも

そんな訳はないので馬鹿な煽りはやめた方が良いですよ
2024.04.25 22:18
もくすけさん 
(No.111)
まあIPAは過去午後2でろくでもない傾斜配点して不合格出したこともあるし多少はね
掲示板でログ見てゾッとしたよ

ただ全部書き出し7点×2(記号は3点×2)
という意味で10点×2なら無いわけではないし、
プログラム苦手な人でも国語の問題だから解けるという意味であり得るかな

パスワード抜けは14点失う可能性はあると思うよ
他の問題で多くの人が間違えてるのって、これ除くともはや最後くらいだし
2024.04.25 23:02
神のみぞさん 
(No.112)
やたら強気だが、パスワード無しが正答の可能性も全然あるので、弱気の裏返しの煽りはやめましょう
2024.04.26 00:16
プルプルさん 
(No.113)
さすがにパスワード抜けだけであれば大幅減点かもしれませんが、部分点は来るのでは?と思います
配点10-14点飛んじゃうと、一気に不合格に傾くレベルなのでそう思いました。
2024.04.26 06:09
Oyajiさん 
(No.114)
総務省の国民のためのサイバーセキュリティサイトでは

パスワードとは、そのIDを割り振られた本人だけが知る情報で、それを入力することでIDを持つ本人であることを確認するための符号です

と書かれてる。パスワードなしが正解も十分ありえるで
2024.04.26 07:44
おおおおぼさん 
(No.115)
パスワードはアクセスしてはいけません
パスワードは見える状態です(何なら例外的に平文が入ってるかも)

↑これでなぜパスワードが除外できるのか理解できん
最後の問題を正解してる優秀な人たちもパスワード入れてないからビックリ
2024.04.26 09:08
名無しさん 
(No.116)
>Oyajiさん

(そもそも問題とは関係ないですが)
何故それを読んで尚パスワード無しが正解だと思えるのでしょうか
2024.04.26 10:41
Kingshuさん 
(No.117)
B部長> 今回はレインボーテーブル攻撃を回避するため、パスワードのハッシュのロジックの改修を君にお願いしてもいいかな?
A君  > ユーザマスタテーブルの定義は明記されていませんので、ソルト値はどこに保存するのでしょうか?
B部長> ユーザマスタテーブルの定義に変更はないものとする。
A君  > 承知いたしました。

後日、A君は選択肢Aのように実装を改修し、無事に本番へのリリースがされました。
しかし、リリース後、新規ユーザ登録処理のDBのINSERTで以下のような大量にエラーが発生しています。
  ERROR 1406 (22001): Data too long for column 'password' at row 1

B部長はA君に原因の調査を指示した。
A君は「ユーザマスタテーブルの定義に変更はないものとする」と指示されましたので、
passwordの桁拡張を行っていませんでした。と回答していたようです。

あなたがA君ならどうしますか?
2024.04.26 10:46
しょうゆさん 
(No.118)
>No.117

まさにこの考えで(7)はイにしましたね。

公式解答はアになるんでしょうけど。
2024.04.26 11:01
シータさん 
(No.119)
>あなたがA君ならどうしますか?
A君:SHA-1からCRYPTREC政府推奨暗号リスト記載のハッシュ関数に変更した時点で元のデータ長より絶対に長くなるから、定義変更無しの実装は無理ゲー
2024.04.26 11:02
馬とロバさん 
(No.120)
2-7
ア選択だけど。図2でパスワード列にはハッシュ値を入れるって書いてるじゃないですかー。ソルト値付けてもハッシュ値なんすかーって思った。
2024.04.26 11:42
園児にあさん 
(No.121)
>A君  > ユーザマスタテーブルの定義は明記されていませんので、ソルト値はどこに保存するのでしょうか?
>B部長> ユーザマスタテーブルの定義に変更はないものとする。

B部長が質問に答えられないアスペなので部長を殴る
2024.04.26 11:45
園児にあさん 
(No.122)
「ソルトはDB以外のストレージに保管する」っていうのをIPAが強いてきてるならイだけど、普通に考えたらアじゃないの?

だってソルト保管に使えそうなストレージなんて言及されてないし、そもそもパスワード列の桁数についても言及されてない。
2024.04.26 12:24
園児にあさん 
(No.123)
>図2でパスワード列にはハッシュ値を入れるって書いてるじゃないですかー。ソルト値付けてもハッシュ値なんすかーって思った。
今問題読み返してたら下線②の直前に「図2の仕様も修正しろ」って書いてあったわw
もしかしたらそのツッコミ用かも
2024.04.26 12:26
さぼりーまんさん 
(No.124)
>No.117
>No.118
いやほんとその通り
定義変更なしってのが厳密なようで曖昧
2024.04.26 17:52
これが言いたいさん 
(No.125)
B部長はA君に原因の調査を指示した。
A君は「ユーザマスタテーブルの定義に変更はないものとする」と指示されましたので、
passwordの桁拡張を行っていませんでした。と回答していたようです。


↑これでイにしたわ
桁触れられてないから勝手に増える方向持っていくのもセンスないでしょ
saltは別んとこから持ってきてるに一票
2024.04.28 20:06
秋頑張るさん 
(No.126)
俺もイにしたけど、徳丸先生の「ソルト付きハッシュのソルトはどこに保存するのが一般的か」っていうQiitaの記事読んでアの方が正しい気がしてきたわ
2024.04.28 21:33

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの投稿はできません。

その他のスレッド


Pagetop