Powershellについて (1)

Powershellの扱い方にも慣れてきたので、いろいろとトライアル&エラーしています。

今回は連想配列によるパラメータの記述に関してです。
下の例のように、連想配列はコマンドレットの引数として直接渡すことができます。

$itemParams = @{
        Name     = "test1.txt"
        Path     = "$env:USERPROFILE\Desktop"
        ItemType = "file"
}
New-Item @itemParams

複数のファイルを作成する場合に、連想配列を用いてどう記述すればよいのでしょうか。
下の例のように、単純にパラメータを記述すると当然エラーになります。

$itemParams = @{
        Name     = @("test1.txt", "test2.txt")
        Path     = "$env:USERPROFILE\Desktop"
        ItemType = "file"
}
New-Item @itemParams

New-Item : パラメーター 'Name' で必要とされる型 'System.String''System.Object[]' を変換できません。指定されたメソッドはサポートされていません。
発生場所 行:1 文字:10
+ New-Item @itemParams
+          ~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [New-Item]、ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgument,Microsoft.PowerShell.Commands.NewItemCommand</span>

やはりパラメータ定義を別ブロックに分ける必要があるのでしょうか…。
あまりエレガントとは言えないですが、下の例のように記述することで2つのファイルを作成することができました。

$itemParams = @{
        Path     = "$env:USERPROFILE\Desktop"
        ItemType = "file"
}
$fileNames  = @("test1.txt", "test2.txt")
foreach ($fileName in $fileNames) {
	$itemParams.Name = $fileName
        New-Item @itemParams
}

連想配列を使うと一目で引数を把握することができるので便利ですね。

Secure Channel (Schannel)

暗号化を通してID認証やセキュア通信、プライベート通信を実現する一連のセキュリティプロトコルを含んだSSP (Security Support Provider)のこと。HTTPSを要するインターネットアプリケーションで主に使用される。

セキュア通信ってなに?プライベート通信との違いは?

  • 機密性 (confidentiality)
  • 認証 (Authentication)
  • メッセージ完全性 (Message integrity)
  • 否認不可性 (Nonrepudiation)
  • 可用性 (Availability)
  • アクセス制御 (Access control)

Security Support Provider (SSP)

認証やメッセージの完全性と隠匿、あらゆるアプリケーションプロトコル(HTTP, SMTP, POP3, FTP, MIMEなど)に対する統合セキュリティサービスを提供するための共通APIのこと。

 ⇒ アプリケーションプロトコルの設計者がプロトコル自体を修正せずとも、異なるセキュリティサービスを利用できるようインターフェースを切っている。

インターフェースを切るのは大事。責任分界点を明確に。

メッセージ認証コード(MAC, Message Authentication Code)

メッセージの改竄や偽造を検知するために使用される。

  1. メッセージの送り手と受け手で共有されたセッションキーを用いて、メッセージ本文の一方向ハッシュ (不可逆ハッシュ) を暗号化し、MACを生成する。
  2. 生成したMACをメッセージに添えて受け手へ送付する。
  3. メッセージの受け手は共有されたセッションキーとメッセージ本文を用いて、MACを再生成する。
  4. 再生成されたMACと送り手から受け取ったMACを比較する。
  5. 両者が一致する場合、メッセージは送信中に改竄・偽造されていないと分かる。
Schannelプロトコルでは、MACを生成するために使用するアルゴリズムをメッセージの送り手・受け手が登録している暗号化スイートから決定している。
セッションキー

共通鍵をもとにクライアントとサーバ間で取り決められた、暗号解読されない程度に短命な暗号鍵。セッションキーが相手に渡ると、鍵交換キー(一般的に公開鍵)によって保護されるため、意図した相手だけがアクセスできる。セッションキーはCryptDeriveKey関数を呼ぶことでハッシュ値から引き出される。

TLS/SSLの暗号化スイート

暗号化アルゴリズムの集まりのこと。暗号化スイートからキーや暗号情報の作成に使用するアルゴリズムを選ぶ。

鍵交換

鍵交換アルゴリズム ( 公開鍵アルゴリズム。暗号化に使う共通鍵と復号化に使う秘密鍵の)は共有キーを生成するために必要な情報を保護する。比較的データ量の少ないやり取りで有効。鍵交換アルゴリズムには、Diffie-Hellman key exchange (DH) やKey Exchange Algorithm (KEA)

一括暗号化

クライアントとサーバ間で交換したメッセージを暗号化する。データ量の多いやり取りで有効。

メッセージ認証

メッセージのハッシュとデジタル署名を作成し、メッセージの完全性を高める。

https://i-msdn.sec.s-msft.com/dynimg/IC858360.png

開発者はこれらの要素をALG_IDを使って指定する。

Windows Server 2016に対応した暗号化スイート一覧

TLS Cipher Suites in Windows 10 v1607 (Windows)

Schannel クレデンシャル

Schannelプロトコルはサーバ/クライアントを認証するためにクレデンシャル ( = X.509証明書) を要求する。証明書から得られる公開鍵/秘密鍵の情報を用いてクライアントにサーバの身元証明を示す。公開鍵/秘密鍵はメッセージの整合性を担保するためにも用いられる。サーバ認証にはSchannelセキュリティプロトコルが必要となる。

本日の英単語

tampering:(許可なく、 勝手に)変更する。改竄。
forgery:偽造

参考文献

Secure Channel (Windows)

始まりがあれば、終わりがある

とあるITベンダーに入社して1年。

素粒子の世界からIT業界へ飛び込み、右も左も分からぬ日々。

日々の学びの記録とアウトプット、その共有の場として。

 

I never worry about action, but only inaction.

行動することを恐れはしない。ただ無為に時を過ごすことを恐れるだけだ。

 - Winston Churchill