C#中級

中級 C#で学ぶセキュリティ基礎|練習問題編

導入

現代のソフトウェア開発において、セキュリティは避けて通れない重要な要素です。特にC#を用いたアプリケーション開発では、認証やアクセス制御、データ保護といったセキュリティ対策が求められます。この記事では、実務で直面する可能性のある具体的なシナリオを通じて、C#におけるセキュリティの基礎を学びます。

教科書レベルの解説(セキュリティ基礎)

重要な概念の整理

セキュリティの基本的な概念として、認証、承認、暗号化があります。認証はユーザーが正当なものであるかを確認するプロセスです。承認は、認証されたユーザーがどのリソースにアクセスできるかを決定します。暗号化はデータを保護するための手段であり、特に機密情報を扱う際には必須です。

コード例(C#)


using System;
using System.Security.Cryptography;
using System.Text;

public class SecurityExample
{
    public static string HashPassword(string password)
    {
        using (var sha256 = SHA256.Create())
        {
            var bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password));
            return Convert.ToBase64String(bytes);
        }
    }
    
    public static void Main()
    {
        string password = "securePassword123";
        string hashedPassword = HashPassword(password);
        Console.WriteLine($"Hashed Password: {hashedPassword}");
    }
}

コードの行ごとの解説

  1. using System; – 基本的なシステムクラスを使用します。
  2. using System.Security.Cryptography; – セキュリティ関連の機能を提供する名前空間をインポートします。
  3. using System.Text; – 文字列操作に必要な機能をインポートします。
  4. public static string HashPassword(string password) – パスワードをハッシュ化するメソッドを定義します。
  5. using (var sha256 = SHA256.Create()) – SHA256アルゴリズムのインスタンスを作成し、スコープを限定します。
  6. var bytes = sha256.ComputeHash(Encoding.UTF8.GetBytes(password)); – パスワードをバイト配列に変換し、ハッシュを計算します。
  7. return Convert.ToBase64String(bytes); – ハッシュ化されたバイト配列をBase64形式の文字列に変換して返します。
  8. public static void Main() – プログラムのエントリポイントです。
  9. string password = “securePassword123”; – テスト用のパスワードを定義します。
  10. string hashedPassword = HashPassword(password); – 定義したパスワードをハッシュ化します。
  11. Console.WriteLine($”Hashed Password: {hashedPassword}”); – ハッシュ化されたパスワードをコンソールに出力します。

練習問題編

以下の練習問題に取り組んでみましょう。各問題の後に模範解答と解説を用意しています。

  1. 問題1: 上記のコードを用いて、パスワードのハッシュ化を行うメソッドに、ソルトを追加する方法を考えなさい。

    模範解答: ソルトを生成し、パスワードと結合した後にハッシュ化を行う。これにより、同じパスワードでも異なるハッシュが生成される。

  2. 問題2: ハッシュ化されたパスワードを確認するメソッドを実装しなさい。

    模範解答: 新たに入力されたパスワードをハッシュ化し、既存のハッシュと比較するメソッドを作成する。

  3. 問題3: C#でのデータ暗号化の方法を説明し、簡単なコード例を示しなさい。

    模範解答: AesCryptoServiceProviderを使用してデータを暗号化する。具体的には、平文データをバイト配列に変換し、暗号化後のデータをBase64形式で返す。

  4. 問題4: 認証と承認の違いを説明し、実際のアプリケーションでの利用シーンを考えなさい。

    模範解答: 認証はユーザーの身元確認、承認はそのユーザーが何にアクセスできるかを決定する。例えば、ログイン後のユーザー権限に基づくページ表示が承認にあたる。

まとめ

  • セキュリティの基礎を理解することは、実務において不可欠です。
  • ハッシュ化や暗号化の技術は、データ保護のための重要な手段です。
  • 実際の業務で直面する問題を考慮し、適切なセキュリティ対策を講じることが求められます。