Wikibooks jawikibooks https://ja.wikibooks.org/wiki/%E3%83%A1%E3%82%A4%E3%83%B3%E3%83%9A%E3%83%BC%E3%82%B8 MediaWiki 1.47.0-wmf.23 first-letter メディア 特別 トーク 利用者 利用者・トーク Wikibooks Wikibooks・トーク ファイル ファイル・トーク MediaWiki MediaWiki・トーク テンプレート テンプレート・トーク ヘルプ ヘルプ・トーク カテゴリ カテゴリ・トーク Transwiki Transwiki‐ノート TimedText TimedText talk モジュール モジュール・トーク Event Event talk Wikibooks:執筆依頼 4 894 304556 304543 2026-10-10T14:00:17Z Kyube 57 残念ですが 304556 wikitext text/x-wiki '''ご覧になりたい教科書・実用書・解説書がありますか? あれば、ぜひ教科書名をここに書き加えて下さい。''' 執筆依頼をされる前に、すでに同類の教科書がないか、[[Wikibooks:蔵書一覧|蔵書一覧]]や[[メインページ]]でご確認下さい。 なお、ウィキジュニアに関する執筆依頼については、[[wikijunior:執筆依頼]]にお願いします。 # 注目が不要となる時期を判定しやすくするため、記入時には日時・署名を項目の末尾に入力してください(半角チルダ4つ<nowiki>~~~~</nowiki>を書き加えれば、投稿時に日時付きの署名に変換されます)。無日付の項目は除去される場合があります。 # 執筆が開始されたものを見つけたら取り除いてください。 == コメント付き依頼 == === 執筆依頼 === *[[音響学]]/[[音響工学]]([[:en:Acoustics|英語版]]がfeatured bookになっているので、日本語版でも読んでみたいと思いました。)--[[利用者:ウィキミーディアン|ウィキミーディアン]] 2008年4月24日 (木) 07:06 (UTC) **英語版のリンクでコロンが2つありまして、リンクになっていないため修正させていただきました。何か問題がございましたら差し戻して構いません。--[[利用者:ネイ|ネイ]] ([[利用者・トーク:ネイ|トーク]]) 2019年1月13日 (日) 05:32 (UTC) *[[位相幾何学/最近注目されているトポロジー/カンドル]] これは、[[wikibooks:ヘルプデスク|ヘルプデスク]]に執筆して欲しいという旨が書かれていたので一応記載。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:31 (UTC) *[[犯罪心理学]] 心理学系も増やしていこうと思いました。ただ、私の力だけでは作成不可能なので依頼。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:33 (UTC) * [[手話]](日本独自のものは[[日本語]]の一部で解説すべきでしょうか。ウィクショナリーでも検討されつつあるので、こちらでも。)--{{利用者:ダーフレ/English|+}}2020年8月23日 (日) 14:37 (UTC) *[[架空世界の作り方]]小説を書くうえで必要不可欠なので執筆をお願いしたい *[[太鼓の達人]](仮)初心者向けのプレイ方法から、鬼裏を攻略するための手の使い方まで'''Wikipediaでは載せられないこと'''を幅広く載せてほしい。観覧していて自分もプレイしてみたいと思った --[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *:まずは[https://wikiwiki.jp/taiko-fumen 譜面とかwiki]などのドンだーコミュニティを参照してみてはいかがですか?--[[特別:投稿記録/&#126;2025-66365|&#126;2025-66365]] ([[利用者・トーク:&#126;2025-66365|会話]]) 2025年7月6日 (日) 11:02 (UTC) *::サイトの紹介ありがとうございます,参考にさせていただきます *::ただしバリアフリーの面を考えたら余計な情報は省きたくて(過去にあった曲とか) *::バリアフリーにも詳しい方に編集していただきたいです--[[特別:投稿記録/&#126;2025-147153|&#126;2025-147153]] ([[利用者・トーク:&#126;2025-147153|会話]]) 2025年7月7日 (月) 09:30 (UTC) *[[音ゲーの世界]](仮)タイトル通り音ゲーの幅広い世界を知ってもらうためのもの。各ゲームの共通点などを載せてほしい。作品の解説はできるだけ浅めにしてほしい(少なくとも上記でリクエストした太鼓の達人は)--[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *[[:w:仕送りの停止通告に対する賠償的扶養請求事件|仕送りの停止通告に対する賠償的扶養請求事件]] - ウィキペディアでイチから記事を書いたことがないため。[[民法第877条]]、[[民法第879条]]で言及のある事件であり、LEX/DB掲載事件なので特筆性アリです。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:28 (UTC) **[[:w:プロジェクト:法学]]参加者にて対応されたい。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:36 (UTC) **:{{コメント2|コメント}}日本語版ウィキペディアに対する呼びかけをここでされても意味はなく目的外利用といえます。また個人的な争訟ごとをアカデミックな事項と託けて展開するのは、いずれのプロジェクトの運営趣旨にも反します。--[[利用者:Tomzo|Tomzo]] ([[利用者・トーク:Tomzo|トーク]]) 2026年9月30日 (水) 23:26 (UTC) *[[第77回NHK紅白歌合戦にちいかわが出場するまでの軌跡]] - 確定事項だから。--[[利用者:紅白にちいかわ出る|紅白にちいかわ出る]] ([[利用者・トーク:紅白にちいかわ出る|トーク]]) 2026年10月10日 (土) 11:10 (UTC) ** 仮に事実であるとしても、wikibooksの収録範囲ではありません。諦めてください。 --[[利用者:Kyube|kyube]] ([[利用者・トーク:Kyube|トーク]]) 2026年10月10日 (土) 13:59 (UTC) === 加筆依頼 === *[[高校化学 化学反応とエネルギー]](令和4年学習指導要領改訂により熱化学方程式が廃止、エンタルピー及びエントロピー、ギブスの自由エネルギー等が高校化学に登場。それに対応した内容更新を頼みたい。) 2024/07/13 23:07(JST) *[[カシノ]](ビルドの意味がよく理解できません。ビルドに詳しい方、加筆をお願いします)--[[利用者:AkiR27User|AkiR27User]] ([[利用者・トーク:AkiR27User|トーク]]) 2026年3月17日 (火) 22:29 (UTC) == 加筆依頼 == *[[小学校理科]] *[[ポーランド語]] *[[自動車の運転]] *[[占い]] - [[利用者:ざっとの編集所|ざっとの編集所]] ([[利用者・トーク:ざっとの編集所|トーク]]) 2023年9月25日 (月) 02:02 (UTC) * [[:カテゴリ:スタブ|カテゴリ:スタブ]]も参照 == NDCによる赤リンクリスト == === 0類 総記 === ==== 007 情報科学 ==== ===== 007.64 コンピュータ プログラミング ===== [[ActionScript]] - [[DL/I]] - [[Mathematica]] - [[MATLAB]] - [[PASCAL]] - [[PL/I]] - [[winelib]] - [[XHTML]] === 1類 哲学 === ==== 140 心理学 ==== [[臨床心理学]] - [[人間性心理学]] - [[犯罪心理学]] === 2類 歴史 === [[歴史書籍]] - [[考古学]]  ==== 290 地理、地誌、紀行 ==== [[自然地理学]] - [[人文地理学]] - [[文化地理学]] === 3類 社会科学 === [[政策学]] ==== 310 政治 ==== [[政治思想]] - [[政治史]] - [[政治体制論]] - [[国家論]] - [[行政学]] - [[地方自治論]] - [[国際政治学]] - [[比較政治学]] - [[政策過程論]] - [[数理政治学]] - [[計量政治学]] - [[国家公務員試験]] - [[地方公務員試験]] ==== 320 法律 ==== [[司法書士試験]] - [[行政書士試験]] ==== 330 経済 ==== [[計量経済学]] - [[公共経済学・財政学]] - [[金融論]] - [[国際経済学]] - [[労働経済学]] - [[開発経済学]] - [[環境経済学]] - [[経済学説史・経済思想]] - [[株取引]] - [[税理士試験]] - [[中小企業診断士試験]] - [[経済学検定試験]] ==== 370 教育 ==== [[生涯教育]] - [[手話]] ==== 380 風俗習慣、民俗学、民族学 ==== [[民俗学]] - [[民族学]] - [[文化人類学]] - [[風俗史・民俗誌]] - [[衣食住の習俗]] - [[社会・家庭生活の習俗]] - [[通過儀礼・冠婚葬祭]] - [[年中行事・祭礼]] - [[民間信仰・迷信]] - [[伝説・民話]] === 4類 自然科学 === [[応用科学]] ==== 410 数学 ==== [[整数論]] - [[離散数学]] - [[論理学]] - [[数学基礎論]] - [[応用数学]] - [[数学史]] ==== 420 物理学 ==== [[物性物理学]] - [[素粒子物理学]] ==== 430 化学 ==== [[一般化学]] - [[物理化学]] - [[分析化学]] - [[生化学]] ==== 440 天文学、宇宙科学 ==== [[宇宙科学]] ==== 450 地球科学、地学 ==== [[地質学]] - [[古生物学]] - [[地球物理学]] ==== 460 生物化学、一般生物学 ==== [[生物化学]] - [[一般生物学]] - [[発生生物学]] - [[進化生物学]] - [[集団遺伝学]] - [[保全のための生物学]] ==== 490 医学 ==== [[内科学]] - [[外科学]] - [[精神医学]] - [[法医学]] - [[伝統医学]] - [[神経科学]] === 5類 技術、工学 === [[コンピュータアーキテクチャ]] ==== 590 家政学、生活科学 ==== [[織物]] - [[裁縫]] - [[編み物]] - [[掃除]] === 6類 産業 === [[園芸学]] - [[林学]] - [[商学]] - [[旅行地理検定]] === 7類 芸術 === [[書道]] - [[水墨画]] - [[写真撮影]] - [[和太鼓]] - [[ジャグリング]] ==== 780 スポーツ、体育 ==== [[ボウリング]] - [[スキューバダイビング]] ==== 790 諸芸、娯楽 ==== [[茶道]] - [[華道]] === 8類 言語・語学 === [[理論言語学]] - [[モンゴル語]] - [[スワヒリ語]] - [[TOEFL]] - [[日琉語族]] === 9類 文学 === [[文学史]] === 未分類・分類不明 === == 関連項目 == *[[Wikibooks:蔵書一覧]] *[[Wikibooks:ヘルプデスク]] *[[特別:wantedpages|投稿が望まれているページ]] [[Category:ウィキブックス|しつひついらい]] ebit3ok8zc6w2n9puhooviiltzk31kb 304583 304556 2026-10-11T02:58:01Z Pyontachiikawa 92767 /* 執筆依頼 */ 紅白歌合戦にちいかわが出るのは本当だから 304583 wikitext text/x-wiki '''ご覧になりたい教科書・実用書・解説書がありますか? あれば、ぜひ教科書名をここに書き加えて下さい。''' 執筆依頼をされる前に、すでに同類の教科書がないか、[[Wikibooks:蔵書一覧|蔵書一覧]]や[[メインページ]]でご確認下さい。 なお、ウィキジュニアに関する執筆依頼については、[[wikijunior:執筆依頼]]にお願いします。 # 注目が不要となる時期を判定しやすくするため、記入時には日時・署名を項目の末尾に入力してください(半角チルダ4つ<nowiki>~~~~</nowiki>を書き加えれば、投稿時に日時付きの署名に変換されます)。無日付の項目は除去される場合があります。 # 執筆が開始されたものを見つけたら取り除いてください。 == コメント付き依頼 == === 執筆依頼 === *[[音響学]]/[[音響工学]]([[:en:Acoustics|英語版]]がfeatured bookになっているので、日本語版でも読んでみたいと思いました。)--[[利用者:ウィキミーディアン|ウィキミーディアン]] 2008年4月24日 (木) 07:06 (UTC) **英語版のリンクでコロンが2つありまして、リンクになっていないため修正させていただきました。何か問題がございましたら差し戻して構いません。--[[利用者:ネイ|ネイ]] ([[利用者・トーク:ネイ|トーク]]) 2019年1月13日 (日) 05:32 (UTC) *[[位相幾何学/最近注目されているトポロジー/カンドル]] これは、[[wikibooks:ヘルプデスク|ヘルプデスク]]に執筆して欲しいという旨が書かれていたので一応記載。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:31 (UTC) *[[犯罪心理学]] 心理学系も増やしていこうと思いました。ただ、私の力だけでは作成不可能なので依頼。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:33 (UTC) * [[手話]](日本独自のものは[[日本語]]の一部で解説すべきでしょうか。ウィクショナリーでも検討されつつあるので、こちらでも。)--{{利用者:ダーフレ/English|+}}2020年8月23日 (日) 14:37 (UTC) *[[架空世界の作り方]]小説を書くうえで必要不可欠なので執筆をお願いしたい *[[太鼓の達人]](仮)初心者向けのプレイ方法から、鬼裏を攻略するための手の使い方まで'''Wikipediaでは載せられないこと'''を幅広く載せてほしい。観覧していて自分もプレイしてみたいと思った --[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *:まずは[https://wikiwiki.jp/taiko-fumen 譜面とかwiki]などのドンだーコミュニティを参照してみてはいかがですか?--[[特別:投稿記録/&#126;2025-66365|&#126;2025-66365]] ([[利用者・トーク:&#126;2025-66365|会話]]) 2025年7月6日 (日) 11:02 (UTC) *::サイトの紹介ありがとうございます,参考にさせていただきます *::ただしバリアフリーの面を考えたら余計な情報は省きたくて(過去にあった曲とか) *::バリアフリーにも詳しい方に編集していただきたいです--[[特別:投稿記録/&#126;2025-147153|&#126;2025-147153]] ([[利用者・トーク:&#126;2025-147153|会話]]) 2025年7月7日 (月) 09:30 (UTC) *[[音ゲーの世界]](仮)タイトル通り音ゲーの幅広い世界を知ってもらうためのもの。各ゲームの共通点などを載せてほしい。作品の解説はできるだけ浅めにしてほしい(少なくとも上記でリクエストした太鼓の達人は)--[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *[[:w:仕送りの停止通告に対する賠償的扶養請求事件|仕送りの停止通告に対する賠償的扶養請求事件]] - ウィキペディアでイチから記事を書いたことがないため。[[民法第877条]]、[[民法第879条]]で言及のある事件であり、LEX/DB掲載事件なので特筆性アリです。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:28 (UTC) **[[:w:プロジェクト:法学]]参加者にて対応されたい。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:36 (UTC) **:{{コメント2|コメント}}日本語版ウィキペディアに対する呼びかけをここでされても意味はなく目的外利用といえます。また個人的な争訟ごとをアカデミックな事項と託けて展開するのは、いずれのプロジェクトの運営趣旨にも反します。--[[利用者:Tomzo|Tomzo]] ([[利用者・トーク:Tomzo|トーク]]) 2026年9月30日 (水) 23:26 (UTC) *[[第77回NHK紅白歌合戦にちいかわが出場するまでの軌跡]] - 確定事項だから。--[[利用者:紅白にちいかわ出る|紅白にちいかわ出る]] ([[利用者・トーク:紅白にちいかわ出る|トーク]]) 2026年10月10日 (土) 11:10 (UTC) === 加筆依頼 === *[[高校化学 化学反応とエネルギー]](令和4年学習指導要領改訂により熱化学方程式が廃止、エンタルピー及びエントロピー、ギブスの自由エネルギー等が高校化学に登場。それに対応した内容更新を頼みたい。) 2024/07/13 23:07(JST) *[[カシノ]](ビルドの意味がよく理解できません。ビルドに詳しい方、加筆をお願いします)--[[利用者:AkiR27User|AkiR27User]] ([[利用者・トーク:AkiR27User|トーク]]) 2026年3月17日 (火) 22:29 (UTC) == 加筆依頼 == *[[小学校理科]] *[[ポーランド語]] *[[自動車の運転]] *[[占い]] - [[利用者:ざっとの編集所|ざっとの編集所]] ([[利用者・トーク:ざっとの編集所|トーク]]) 2023年9月25日 (月) 02:02 (UTC) * [[:カテゴリ:スタブ|カテゴリ:スタブ]]も参照 == NDCによる赤リンクリスト == === 0類 総記 === ==== 007 情報科学 ==== ===== 007.64 コンピュータ プログラミング ===== [[ActionScript]] - [[DL/I]] - [[Mathematica]] - [[MATLAB]] - [[PASCAL]] - [[PL/I]] - [[winelib]] - [[XHTML]] === 1類 哲学 === ==== 140 心理学 ==== [[臨床心理学]] - [[人間性心理学]] - [[犯罪心理学]] === 2類 歴史 === [[歴史書籍]] - [[考古学]]  ==== 290 地理、地誌、紀行 ==== [[自然地理学]] - [[人文地理学]] - [[文化地理学]] === 3類 社会科学 === [[政策学]] ==== 310 政治 ==== [[政治思想]] - [[政治史]] - [[政治体制論]] - [[国家論]] - [[行政学]] - [[地方自治論]] - [[国際政治学]] - [[比較政治学]] - [[政策過程論]] - [[数理政治学]] - [[計量政治学]] - [[国家公務員試験]] - [[地方公務員試験]] ==== 320 法律 ==== [[司法書士試験]] - [[行政書士試験]] ==== 330 経済 ==== [[計量経済学]] - [[公共経済学・財政学]] - [[金融論]] - [[国際経済学]] - [[労働経済学]] - [[開発経済学]] - [[環境経済学]] - [[経済学説史・経済思想]] - [[株取引]] - [[税理士試験]] - [[中小企業診断士試験]] - [[経済学検定試験]] ==== 370 教育 ==== [[生涯教育]] - [[手話]] ==== 380 風俗習慣、民俗学、民族学 ==== [[民俗学]] - [[民族学]] - [[文化人類学]] - [[風俗史・民俗誌]] - [[衣食住の習俗]] - [[社会・家庭生活の習俗]] - [[通過儀礼・冠婚葬祭]] - [[年中行事・祭礼]] - [[民間信仰・迷信]] - [[伝説・民話]] === 4類 自然科学 === [[応用科学]] ==== 410 数学 ==== [[整数論]] - [[離散数学]] - [[論理学]] - [[数学基礎論]] - [[応用数学]] - [[数学史]] ==== 420 物理学 ==== [[物性物理学]] - [[素粒子物理学]] ==== 430 化学 ==== [[一般化学]] - [[物理化学]] - [[分析化学]] - [[生化学]] ==== 440 天文学、宇宙科学 ==== [[宇宙科学]] ==== 450 地球科学、地学 ==== [[地質学]] - [[古生物学]] - [[地球物理学]] ==== 460 生物化学、一般生物学 ==== [[生物化学]] - [[一般生物学]] - [[発生生物学]] - [[進化生物学]] - [[集団遺伝学]] - [[保全のための生物学]] ==== 490 医学 ==== [[内科学]] - [[外科学]] - [[精神医学]] - [[法医学]] - [[伝統医学]] - [[神経科学]] === 5類 技術、工学 === [[コンピュータアーキテクチャ]] ==== 590 家政学、生活科学 ==== [[織物]] - [[裁縫]] - [[編み物]] - [[掃除]] === 6類 産業 === [[園芸学]] - [[林学]] - [[商学]] - [[旅行地理検定]] === 7類 芸術 === [[書道]] - [[水墨画]] - [[写真撮影]] - [[和太鼓]] - [[ジャグリング]] ==== 780 スポーツ、体育 ==== [[ボウリング]] - [[スキューバダイビング]] ==== 790 諸芸、娯楽 ==== [[茶道]] - [[華道]] === 8類 言語・語学 === [[理論言語学]] - [[モンゴル語]] - [[スワヒリ語]] - [[TOEFL]] - [[日琉語族]] === 9類 文学 === [[文学史]] === 未分類・分類不明 === == 関連項目 == *[[Wikibooks:蔵書一覧]] *[[Wikibooks:ヘルプデスク]] *[[特別:wantedpages|投稿が望まれているページ]] [[Category:ウィキブックス|しつひついらい]] iaqnr4c88knf9pp6h0u6t46f29aaocz 304585 304583 2026-10-11T03:02:25Z Tomzo 248 [[Special:Contributions/Pyontachiikawa|Pyontachiikawa]] ([[User talk:Pyontachiikawa|会話]]) による編集を取り消し、Kyube による直前の版へ差し戻す 304556 wikitext text/x-wiki '''ご覧になりたい教科書・実用書・解説書がありますか? あれば、ぜひ教科書名をここに書き加えて下さい。''' 執筆依頼をされる前に、すでに同類の教科書がないか、[[Wikibooks:蔵書一覧|蔵書一覧]]や[[メインページ]]でご確認下さい。 なお、ウィキジュニアに関する執筆依頼については、[[wikijunior:執筆依頼]]にお願いします。 # 注目が不要となる時期を判定しやすくするため、記入時には日時・署名を項目の末尾に入力してください(半角チルダ4つ<nowiki>~~~~</nowiki>を書き加えれば、投稿時に日時付きの署名に変換されます)。無日付の項目は除去される場合があります。 # 執筆が開始されたものを見つけたら取り除いてください。 == コメント付き依頼 == === 執筆依頼 === *[[音響学]]/[[音響工学]]([[:en:Acoustics|英語版]]がfeatured bookになっているので、日本語版でも読んでみたいと思いました。)--[[利用者:ウィキミーディアン|ウィキミーディアン]] 2008年4月24日 (木) 07:06 (UTC) **英語版のリンクでコロンが2つありまして、リンクになっていないため修正させていただきました。何か問題がございましたら差し戻して構いません。--[[利用者:ネイ|ネイ]] ([[利用者・トーク:ネイ|トーク]]) 2019年1月13日 (日) 05:32 (UTC) *[[位相幾何学/最近注目されているトポロジー/カンドル]] これは、[[wikibooks:ヘルプデスク|ヘルプデスク]]に執筆して欲しいという旨が書かれていたので一応記載。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:31 (UTC) *[[犯罪心理学]] 心理学系も増やしていこうと思いました。ただ、私の力だけでは作成不可能なので依頼。--[[利用者:令和少年|令和少年]] ([[利用者・トーク:令和少年|トーク]]) 2019年6月26日 (水) 09:33 (UTC) * [[手話]](日本独自のものは[[日本語]]の一部で解説すべきでしょうか。ウィクショナリーでも検討されつつあるので、こちらでも。)--{{利用者:ダーフレ/English|+}}2020年8月23日 (日) 14:37 (UTC) *[[架空世界の作り方]]小説を書くうえで必要不可欠なので執筆をお願いしたい *[[太鼓の達人]](仮)初心者向けのプレイ方法から、鬼裏を攻略するための手の使い方まで'''Wikipediaでは載せられないこと'''を幅広く載せてほしい。観覧していて自分もプレイしてみたいと思った --[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *:まずは[https://wikiwiki.jp/taiko-fumen 譜面とかwiki]などのドンだーコミュニティを参照してみてはいかがですか?--[[特別:投稿記録/&#126;2025-66365|&#126;2025-66365]] ([[利用者・トーク:&#126;2025-66365|会話]]) 2025年7月6日 (日) 11:02 (UTC) *::サイトの紹介ありがとうございます,参考にさせていただきます *::ただしバリアフリーの面を考えたら余計な情報は省きたくて(過去にあった曲とか) *::バリアフリーにも詳しい方に編集していただきたいです--[[特別:投稿記録/&#126;2025-147153|&#126;2025-147153]] ([[利用者・トーク:&#126;2025-147153|会話]]) 2025年7月7日 (月) 09:30 (UTC) *[[音ゲーの世界]](仮)タイトル通り音ゲーの幅広い世界を知ってもらうためのもの。各ゲームの共通点などを載せてほしい。作品の解説はできるだけ浅めにしてほしい(少なくとも上記でリクエストした太鼓の達人は)--[[特別:投稿記録/&#126;2025-141541|&#126;2025-141541]] ([[利用者・トーク:&#126;2025-141541|会話]]) 2025年7月6日 (日) 09:53 (UTC) *[[:w:仕送りの停止通告に対する賠償的扶養請求事件|仕送りの停止通告に対する賠償的扶養請求事件]] - ウィキペディアでイチから記事を書いたことがないため。[[民法第877条]]、[[民法第879条]]で言及のある事件であり、LEX/DB掲載事件なので特筆性アリです。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:28 (UTC) **[[:w:プロジェクト:法学]]参加者にて対応されたい。[[特別:投稿記録/&#126;2026-42598-11|&#126;2026-42598-11]] ([[利用者・トーク:&#126;2026-42598-11|トーク]]) 2026年8月1日 (土) 16:36 (UTC) **:{{コメント2|コメント}}日本語版ウィキペディアに対する呼びかけをここでされても意味はなく目的外利用といえます。また個人的な争訟ごとをアカデミックな事項と託けて展開するのは、いずれのプロジェクトの運営趣旨にも反します。--[[利用者:Tomzo|Tomzo]] ([[利用者・トーク:Tomzo|トーク]]) 2026年9月30日 (水) 23:26 (UTC) *[[第77回NHK紅白歌合戦にちいかわが出場するまでの軌跡]] - 確定事項だから。--[[利用者:紅白にちいかわ出る|紅白にちいかわ出る]] ([[利用者・トーク:紅白にちいかわ出る|トーク]]) 2026年10月10日 (土) 11:10 (UTC) ** 仮に事実であるとしても、wikibooksの収録範囲ではありません。諦めてください。 --[[利用者:Kyube|kyube]] ([[利用者・トーク:Kyube|トーク]]) 2026年10月10日 (土) 13:59 (UTC) === 加筆依頼 === *[[高校化学 化学反応とエネルギー]](令和4年学習指導要領改訂により熱化学方程式が廃止、エンタルピー及びエントロピー、ギブスの自由エネルギー等が高校化学に登場。それに対応した内容更新を頼みたい。) 2024/07/13 23:07(JST) *[[カシノ]](ビルドの意味がよく理解できません。ビルドに詳しい方、加筆をお願いします)--[[利用者:AkiR27User|AkiR27User]] ([[利用者・トーク:AkiR27User|トーク]]) 2026年3月17日 (火) 22:29 (UTC) == 加筆依頼 == *[[小学校理科]] *[[ポーランド語]] *[[自動車の運転]] *[[占い]] - [[利用者:ざっとの編集所|ざっとの編集所]] ([[利用者・トーク:ざっとの編集所|トーク]]) 2023年9月25日 (月) 02:02 (UTC) * [[:カテゴリ:スタブ|カテゴリ:スタブ]]も参照 == NDCによる赤リンクリスト == === 0類 総記 === ==== 007 情報科学 ==== ===== 007.64 コンピュータ プログラミング ===== [[ActionScript]] - [[DL/I]] - [[Mathematica]] - [[MATLAB]] - [[PASCAL]] - [[PL/I]] - [[winelib]] - [[XHTML]] === 1類 哲学 === ==== 140 心理学 ==== [[臨床心理学]] - [[人間性心理学]] - [[犯罪心理学]] === 2類 歴史 === [[歴史書籍]] - [[考古学]]  ==== 290 地理、地誌、紀行 ==== [[自然地理学]] - [[人文地理学]] - [[文化地理学]] === 3類 社会科学 === [[政策学]] ==== 310 政治 ==== [[政治思想]] - [[政治史]] - [[政治体制論]] - [[国家論]] - [[行政学]] - [[地方自治論]] - [[国際政治学]] - [[比較政治学]] - [[政策過程論]] - [[数理政治学]] - [[計量政治学]] - [[国家公務員試験]] - [[地方公務員試験]] ==== 320 法律 ==== [[司法書士試験]] - [[行政書士試験]] ==== 330 経済 ==== [[計量経済学]] - [[公共経済学・財政学]] - [[金融論]] - [[国際経済学]] - [[労働経済学]] - [[開発経済学]] - [[環境経済学]] - [[経済学説史・経済思想]] - [[株取引]] - [[税理士試験]] - [[中小企業診断士試験]] - [[経済学検定試験]] ==== 370 教育 ==== [[生涯教育]] - [[手話]] ==== 380 風俗習慣、民俗学、民族学 ==== [[民俗学]] - [[民族学]] - [[文化人類学]] - [[風俗史・民俗誌]] - [[衣食住の習俗]] - [[社会・家庭生活の習俗]] - [[通過儀礼・冠婚葬祭]] - [[年中行事・祭礼]] - [[民間信仰・迷信]] - [[伝説・民話]] === 4類 自然科学 === [[応用科学]] ==== 410 数学 ==== [[整数論]] - [[離散数学]] - [[論理学]] - [[数学基礎論]] - [[応用数学]] - [[数学史]] ==== 420 物理学 ==== [[物性物理学]] - [[素粒子物理学]] ==== 430 化学 ==== [[一般化学]] - [[物理化学]] - [[分析化学]] - [[生化学]] ==== 440 天文学、宇宙科学 ==== [[宇宙科学]] ==== 450 地球科学、地学 ==== [[地質学]] - [[古生物学]] - [[地球物理学]] ==== 460 生物化学、一般生物学 ==== [[生物化学]] - [[一般生物学]] - [[発生生物学]] - [[進化生物学]] - [[集団遺伝学]] - [[保全のための生物学]] ==== 490 医学 ==== [[内科学]] - [[外科学]] - [[精神医学]] - [[法医学]] - [[伝統医学]] - [[神経科学]] === 5類 技術、工学 === [[コンピュータアーキテクチャ]] ==== 590 家政学、生活科学 ==== [[織物]] - [[裁縫]] - [[編み物]] - [[掃除]] === 6類 産業 === [[園芸学]] - [[林学]] - [[商学]] - [[旅行地理検定]] === 7類 芸術 === [[書道]] - [[水墨画]] - [[写真撮影]] - [[和太鼓]] - [[ジャグリング]] ==== 780 スポーツ、体育 ==== [[ボウリング]] - [[スキューバダイビング]] ==== 790 諸芸、娯楽 ==== [[茶道]] - [[華道]] === 8類 言語・語学 === [[理論言語学]] - [[モンゴル語]] - [[スワヒリ語]] - [[TOEFL]] - [[日琉語族]] === 9類 文学 === [[文学史]] === 未分類・分類不明 === == 関連項目 == *[[Wikibooks:蔵書一覧]] *[[Wikibooks:ヘルプデスク]] *[[特別:wantedpages|投稿が望まれているページ]] [[Category:ウィキブックス|しつひついらい]] ebit3ok8zc6w2n9puhooviiltzk31kb 民法第612条 0 4592 304565 303603 2026-10-10T19:30:21Z Tomzo 248 304565 wikitext text/x-wiki [[法学]]>[[民事法]]>[[民法]]>[[コンメンタール民法]]>[[第3編 債権 (コンメンタール民法)]] ==条文== (賃借権の譲渡及び転貸の制限) ;第612条 # 賃借人は、賃貸人の承諾を得なければ、その[[賃貸借|賃借権]]を譲り渡し、又は賃借物を転貸することができない。 # 賃借人が前項の規定に違反して第三者に賃借物の使用又は収益をさせたときは、賃貸人は、契約の[[解除]]をすることができる。 ==解説== 賃借人による賃借権の無断譲渡及び無断転貸の禁止と、違反行為がなされた場合の賃貸人の解除権について規定している。 転貸自体は、賃貸人の想定していた賃借人の用法と異なる用法に用いられることであるので賃貸人の承諾を要することは十分な理由があるが、一方で、賃料の支払いに不安がない限り、転貸による利用そのものは、賃貸人にとって不利益なものであるとは限らないため、転貸の事実のみをもって解除することに判例が制限を設け、転貸が転貸人に対する背信的行為と認められる場合、解除できるものとした([[#背信的行為|最判昭和28年09月25日]])。 ==参照条文== ==判例== #[https://www.courts.go.jp/hanrei/56007/detail2/index.html 家屋明渡請求](最高裁判決 昭和26年05月31日) #;賃借権の譲渡または転貸を承諾しない家屋の賃貸人は賃貸借契約を解除せずに譲受人または転借人に対し明渡を求め得るか #:賃借権の譲渡または転貸を承諾しない家屋の賃貸人は、賃借契約を解除しなくても、譲受人または転借人に対しその明渡を求めることができる。 #<span id="背信的行為"></span>[https://www.courts.go.jp/hanrei/56009/detail2/index.html 建物収去土地明渡請求](最高裁判決 昭和28年09月25日) #;賃借人が賃貸人の承諾なく第三者に賃借物を使用させたときは賃貸人は常に契約を解除しうるか #:賃借人が賃貸人の承諾なく第三者をして賃借物の使用または収益をなさしめた場合でも、賃借人の当該行為を賃貸人に対する背信的行為と認めるにたらない、建物を建設しても差支ないものと信じたような、特段の事情があるときは、賃貸人は契約を解除することはできない。 #[https://www.courts.go.jp/hanrei/57474/detail2/index.html 建物収去土地明渡請求](最高裁判決昭和31年7月20日)民事訴訟法第115条(現・[[民事訴訟法第115条]]) #;判決の反射的効力を認めたことが違法とされた一事例 #:土地の適法な転借人およびその者からその所有の地上建物を賃借する者等は、賃借人の土地明渡義務が判決により確定されている場合においても、これがために当然賃貸人の土地明渡の請求を拒みえないものと解すべきではない。 #[https://www.courts.go.jp/hanrei/52977/detail2/index.html 第三者異議等](最高裁判決 昭和36年12月21日)[[民法第601条]] #;賃借人の債務不履行による賃貸借解除と転貸借の終了。 #:賃貸借の終了によつて転貸借は当然にその効力を失うものではないが、賃借人の債務不履行により賃貸借が解除された場合には、その結果転貸人としての義務に履行不能を生じ、よつて転貸借は右賃貸借の終了と同時に終了に帰する。 #[https://www.courts.go.jp/hanrei/56231/detail2/index.html 建物収去土地明渡請求](最高裁判決 昭和37年03月29日)[[民法第541条]]、[[民法第613条]] #;賃料延滞による賃貸借の解除と転借人に対する催告の要否 #:適法な転貸借がある場合、賃貸人が賃料延滞を理由として賃貸借契約を解除するには、賃借人に対して催告すれば足り、転借人に対して右延滞賃料の支払の機会を与えなければならないものではない。 #[https://www.courts.go.jp/hanrei/63782/detail2/index.html 建物収去、土地明渡請求](最高裁判決 昭和39年12月25日) #;土地賃借権の無断譲渡につき賃貸人に対する背信的行為と認めるに足りない特段の事情があるものとはいえないとされた事例。 #:土地賃借人たる甲会社が右土地上に建築所有する建物を映画興行に使用中、経営不振のため著名な映画会社である乙会社と合併する話が持ち上つてはいたが、未だその話合が具体的にまとまらないうちに、甲会社が賃貸人に無断で乙会社に右建物を売り渡すとともにその敷地の賃借権をも譲渡した場合に、賃貸人がこれを理由として賃貸借契約を解除したときは、その際判示のような事情があり、また、その後乙会社が甲会社を吸収合併したとしても、右賃借権の譲渡につき背信的行為と認めるに足りない特段の事情があるものとして、右解除を無効とすることはできない。 #[https://www.courts.go.jp/hanrei/56284/detail2/index.html 建物収去土地明渡請求] (最高裁判決昭和40年05月04日) [[民法第370条]],[[民法第87条]]2項,[[民法第423条]] ##'''土地貸借人が該地上の建物に設定した抵当権の効力は当該土地の賃借権に及ぶか。''' ##:土地賃借人が該土地上に所有する建物について[[抵当権]]を設定した場合には、原則として、右抵当権の効力は当該土地の賃借権に及び、右建物の競落人と賃借人との関係においては、右建物の所有権とともに土地の賃借権も競落人に移転するものと解するのが相当である。 ##'''地上建物に抵当権を設定した土地賃借人は抵当建物の競落人に対し地主に代位して当該土地の明渡を請求できるか。''' ##:前項の場合には、賃借人は、賃貸人において右賃借権の移転を承諾しないときであつても、競落人に対し、土地所有者たる賃貸人に代位して右土地の明渡を請求することはできない #[https://www.courts.go.jp/hanrei/74415/detail2/index.html 建物収去土地明渡請求求](最高裁判決 昭和40年6月29日) #;土地の転貸借について黙示の承諾があつたものと認められた事例。 #:土地の賃貸人が、賃借人において賃借土地の一部を転貸している事実を知りながら、三年余にわたる賃貸人であつた期間中、なんらの異議を述べないで賃借人から賃料を取り立てていたときは、右転貸について黙示の承諾をしたものと認めるのが相当である。 #[https://www.courts.go.jp/hanrei/53915/detail2/index.html 建物収去土地明渡請求](最高裁判決  昭和40年12月17日) #;賃借地上の建物が買戻特約付で第三者に売り渡された場合において右建物の敷地について賃借権の譲渡または転貸がなされなかつたものと解された事例。 #:土地賃借人が、第三者に対し、借地上の建物を買戻特約付で売り渡した場合において、当該売買が、実質上、第三者の債権担保の目的でなされたものであり、終局的確定的に権利を転移する趣旨のものでなく、かつ、買戻権がなお土地賃借人に留保されており、また、土地賃借人が前記建物売買後も引き続きその使用を許容されていた判示の事情のもとにおいては、右建物の敷地について民法第612条にいう賃借権の譲渡または転貸がなされなかつたものと解するのが相当である。 #[https://www.courts.go.jp/hanrei/53968/detail2/index.html 建物収去土地明渡請求](最高裁判決 昭和41年01月27日) #;無断転貸を背信行為と認めるに足りないとする特段の事情の存否に関する主張・立証責任。 #:賃借地の無断転貸を賃貸人に対する背信行為と認めるに足りないとする特段の事情は、その存在を賃借人において主張・立証すべきである。 #[https://www.courts.go.jp/hanrei/55039/detail2/index.html 建物収去土地明渡請求](最高裁判決 昭和44年02月18日) #;賃貸人の承諾を得ない賃借権の譲受または転借が賃貸人に対抗できる場合とその主張・立証責任 #:賃貸人の承諾を得ないで賃借権の譲渡または転貸が行なわれた場合であつても、それが賃貸人に対する背信行為と認めるに足りない特段の事情があるときは、譲受人または転借人は、譲受または転借をもつて、賃貸人に対抗することができ、右の特段の事情については、譲受人または転借人において主張・立証責任を負う。 #[https://www.courts.go.jp/hanrei/53173/detail2/index.html  建物収去土地明渡請求](最高裁判決 昭和45年12月11日) #;土地賃借権の無断譲渡が背信行為にあたらない場合における賃借権譲渡人の地位 #:土地賃借権の無断譲渡につき、これを賃貸人に対する背信行為と認めるに足りない特段の事情があるため、賃貸人が右無断譲渡を理由に賃貸借契約を解除することができない場合には、譲受人のみが賃借人となり、譲渡人たる前賃借人は、賃貸借契約関係から離脱し、特段の意思表示がないかぎり、賃貸人に対して契約上の債務を負わないものと解するのが相当である。 #[https://www.courts.go.jp/hanrei/52018/detail2/index.html 建物所有権確認等請求](最高裁判決 昭和47年03月09日) #;賃借地上にある建物の売主と敷地賃借権譲渡の承諾取得義務 #:賃借地上にある建物の売買契約が締結された場合においては、特別の事情のないかぎり、売主は、買主に対し、その建物の敷地の賃借権をも譲渡したものであつて、それに伴い、その賃借権譲渡につき賃貸人の承諾を得る義務を負うものと解すべきである。 #[https://www.courts.go.jp/hanrei/52115/detail2/index.html 建物収去土地明渡請求](最高裁判決 昭和48年10月12日) #;土地の賃貸借契約が賃借人の破産により解除されても信義則上転借権が消滅しないとされた事例 #:土地が適法に転貸され、転借人になんら非違もないのに、賃借人会社の代表者である賃貸入が、右転借権を消滅させるため、右会社の自己破産を申し立てて破産宣告をえ、これを理由に賃貸借契約を解除するようなことは、転借人に対し著しく信義則に反し、右解除により賃貸借契約が終了しても、転借権は消滅しない。 #[https://www.courts.go.jp/hanrei/53293/detail2/index.html 建物明渡](最高裁判決 昭和53年06月29日)[[民事訴訟法第644条]]、競売法25条 #;賃貸中の不動産に対する競売開始決定後賃貸人のした賃借権譲渡の承諾と譲受人の競落人に対する地位 #:賃貸中の不動産に対する競売開始決定の差押の効力発生後賃貸人のした賃借権譲渡の承諾は、特段の事情のない限り、右差押の効力によつて禁止される処分行為にあたらず、譲受人は、賃借権の取得をもつて競落人に対抗することができる。 #[https://www.courts.go.jp/hanrei/52547/detail2/index.html  建物収去土地明渡](最高裁判決 平成8年10月14日) #;小規模で閉鎖的な有限会社における実質的な経営者の交代と民法612条にいう賃借権の譲渡 #:賃借人である小規模で閉鎖的な有限会社において、持分の譲渡及び役員の交代により実質的な経営者が交代しても、そのことは、民法612条にいう賃借権の譲渡に当たらない。 #[https://www.courts.go.jp/hanrei/52544/detail2/index.html 建物賃料等請求本訴、保証金返還請求反訴](最高裁判決 平成9年02月25日)[[民法第601条]] #;賃借人の債務不履行による賃貸借の解除と賃貸人の承諾のある転貸借の帰すう #:賃貸借が賃借人の債務不履行を理由とする解除により終了した場合、賃貸人の承諾のある転貸借は、原則として、賃貸人が転借人に対して目的物の返還を請求した時に、転貸人の転借人に対する債務の履行不能により終了する。 #[https://www.courts.go.jp/hanrei/54787/detail2/index.html  建物収去土地明渡等、建物収去土地明渡](最高裁判決  平成9年07月17日) [[民法第369条]] #;借地上の建物の譲渡担保権者が建物の引渡しを受けて使用収益をする場合と民法612条にいう賃借権の譲渡又は転貸 #:借地上の建物につき借地人から譲渡担保権の設定を受けた者が、建物の引渡しを受けて使用又は収益をする場合には、いまだ譲渡担保権が実行されておらず、譲渡担保権設定者による受戻権の行使が可能であるとしても、建物の敷地について民法612条にいう賃借権の譲渡又は転貸がされたものと解するのが相当である。 #[https://www.courts.go.jp/hanrei/52262/detail2/index.html 建物明渡等請求事件] (最高裁判決 平成14年03月28日)[[民法第1条|民法第1条]]2項,[[借地借家法第34条|借地借家法第34条]] #;事業用ビルの賃貸借契約が賃借人の更新拒絶により終了しても賃貸人が信義則上その終了を再転借人に対抗することができないとされた事例 #:ビルの賃貸,管理を業とする会社を賃借人とする事業用ビル1棟の賃貸借契約が賃借人の更新拒絶により終了した場合において,賃貸人が,賃借人にその知識,経験等を活用してビルを第三者に転貸し収益を上げさせることによって,自ら各室を個別に賃貸することに伴う煩わしさを免れるとともに,賃借人から安定的に賃料収入を得ることを目的として賃貸借契約を締結し,賃借人が第三者に転貸することを賃貸借契約締結の当初から承諾していたものであること,当該ビルの貸室の転借人及び再転借人が,上記のような目的の下に賃貸借契約が締結され転貸及び再転貸の承諾がされることを前提として,転貸借契約及び再転貸借契約を締結し,再転借人が現にその貸室を占有していることなど判示の事実関係があるときは,賃貸人は,信義則上,賃貸借契約の終了をもって再転借人に対抗することができない。 #[https://www.courts.go.jp/hanrei/62532/detail2/index.html 土地明渡請求事件](最高裁判決 平成17年03月10日)[[民法第597条]]1項,[[民法第616条]] #;土地の無断転貸をした賃借人が賃貸人に対し転借人が不法に投棄した産業廃棄物を賃貸借契約終了時に撤去すべき義務を負うとされた事例 #:土地の賃借人が同土地を無断で転貸し,転借人が同土地に産業廃棄物を不法に投棄したという事実関係の下では,賃借人は,賃貸借契約の終了に基づく原状回復義務として,上記産業廃棄物を撤去すべき義務を負う #:*不動産の賃借人は,賃貸借契約上の義務に違反する行為により生じた賃借目的物の毀損について,賃貸借契約終了時に原状回復義務を負う。 #:*:原審における「産業廃棄物の本件土地への投棄は,専ら転借人が単独で行った犯罪行為であるから,賃借人は,転借人へ無断転貸をしたものの,このような犯罪行為である産業廃棄物の投棄についてまで,賃貸借契約の解除に伴う原状回復義務として責任を負うものではない」旨の判断を覆した。 #[https://www.courts.go.jp/hanrei/38195/detail2/index.html 建物収去土地明渡請求事件](最高裁判決 平成21年11月27日) ##賃借人が,借地上の建物の建て替えに当たり賃貸人から得た承諾とは異なる持分割合で新築建物を他の者らの共有とすることを容認して借地を無断転貸したことにつき,賃貸人に対する背信行為と認めるに足りない特段の事情があるとされた事例 ##:賃借人が,借地上の建物を建て替えるに当たり,賃貸人から得た承諾とは異なる持分割合で新築建物を他の者らの共有とすることを容認し,これに伴い共有者の1人において上記承諾を超える持分を取得した限度で借地を無断転貸したとしても,次の1.〜3.など判示の事情の下においては,賃貸人に対する背信行為と認めるに足りない特段の事情があるというべきである。 ##:#新築建物の共有者は,賃借人の妻及び子であって,建て替えの前後を通じて借地上の建物において賃借人と同居しており,上記転貸により借地の利用状況に変化は生じていない。 ##:#賃貸人は,賃借人の持分を10分の1,子の持分を10分の7,妻の持分を10分の2として建物を建て替えることを承諾しており,上記転貸については,賃借人の持分とされるはずであった10分の1の持分が妻の持分とされたことに伴う限度で賃貸人の承諾がなかったにとどまる。 ##:#賃貸人は,賃借人が新築建物の持分を取得することにつき重大な関心を有していなかった。 ##賃借人が,借地上の建物の共有者がその持分を他の者に譲渡することを容認して借地を無断転貸したことにつき,賃貸人に対する背信行為と認めるに足りない特段の事情があるとされた事例 ##:賃借人が,借地上の建物の共有者がその持分を他の者に譲渡することを容認し,これに伴い借地を無断転貸したとしても,次の1.〜3.の事情の下においては,賃貸人に対する背信行為と認めるに足りない特段の事情があるというべきである。 ##:#上記の持分譲渡は,賃借人の子からその妻に対し,離婚に伴う財産分与として行われたものである。 ##:#賃借人の子の妻は,離婚前から借地上の建物において賃借人と同居しており,賃借人の子が上記建物から退去したほかは,上記転貸により借地の利用状況に変化は生じていない。 ##:#賃貸人は,上記転貸により不利益を全く被っていない。 ---- {{前後 |[[コンメンタール民法|民法]] |[[第3編 債権 (コンメンタール民法)|第3編 債権]]<br> [[第3編 債権 (コンメンタール民法)#2|第2章 契約]]<br> [[第3編 債権 (コンメンタール民法)#2-7|第7節 賃貸借]] |[[民法第611条]]<br>(賃借物の一部滅失による賃料の減額請求等) |[[民法第613条]]<br>(転貸の効果) }} {{stub|law}} [[category:民法|612]] 9foc2k6n6t9zfpv987m13o73hyku2kw 民法第467条 0 4774 304626 293398 2026-10-11T11:30:27Z Tomzo 248 /* 解説 */ 304626 wikitext text/x-wiki [[法学]]>[[民事法]]>[[民法]]>[[コンメンタール民法]]>[[第3編 債権 (コンメンタール民法)|第3編 債権]] ==条文== (債権譲渡の対抗要件) ;第467条 # 債権の譲渡(現に発生していない債権の譲渡を含む。)は、譲渡人が債務者に通知をし、又は債務者が承諾をしなければ、'''債務者その他の第三者'''に対抗することができない。 # 前項の通知又は承諾は、'''[[確定日付]]のある証書'''によってしなければ、'''債務者以外の第三者'''に対抗することができない。 ===改正経緯=== 2017年改正により、以下のとおりの改正がなされた。 *見出し *:改正により、債権概念が整理され、旧指名債権以外の債権は有価証券にまとめられたため、単に「債権」とした。 **(改正前)指名債権譲渡の対抗要件 **(改正後)債権譲渡の対抗要件 *第1項 *:[[民法第466条の6|前条]]により、債権譲渡の対象に「将来債権」を含むことが明示されたことに伴う改正。 **(改正前)指名債権の譲渡は、 **(改正後)債権の譲渡(現に発生していない債権の譲渡を含む。)は、 ==解説== :債権(改正前は指名債権)の譲渡の対抗要件を定めた規定である。債務者に対する対抗要件と債務者以外の[[第三者]]に対するそれとで違いがある。 :債権の[[二重譲渡]]の場合は、確定日付ある証書の到達の先後([[#二重譲渡|最判昭和49年3月7日]])、又は、確定日付ある債務者の承諾の日時の先後によつて優劣を決すると考えるのが判例である。 :債務者の承諾の通知は、債権の譲渡人又は、譲受人のいずれに対するものでも良い。一方、譲渡の通知は必ず譲渡人から債務者に対して行う必要があり、譲受人が譲渡人に「代位」して債務者に通知しても無効である。もっとも譲受人が譲渡人に「代理」して債務者に通知するのは差し支えない。 ====債権譲渡の予約==== :現在他人が有する債権について、債権者が譲渡に先立って債務者に通知することにより、債権の譲渡がなされた際に、譲渡を予約することも有効とされる([[#譲渡予約|最判昭和43年8月2日]]) ==参照条文== *[[民法第177条]](不動産に関する物権の変動の対抗要件) *[[民法第377条]](抵当権の処分の対抗要件) *[[民法第364条]](債権を目的とする質権の対抗要件) *[[民法第466条]](債権の譲渡性) *<del>(旧)民法第469条(指図債権の譲渡の対抗要件)</del> *:→[[民法第520条の2|第520条の2]](指図証券の譲渡):対抗要件ではなく効力要件 *[[民法第499条]](任意代位) ==関係条文== *[[動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律]] **[[動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律第4条|同法第4条]] **#法人が債権(金銭の支払を目的とするものであって、[[第3編 債権 (コンメンタール民法)#1-4|民法第3編第1章第4節【債権の譲渡】の規定]]により譲渡されるものに限る。以下同じ。)を譲渡した場合において、当該債権の譲渡につき債権譲渡登記ファイルに譲渡の登記がされたときは、当該債権の債務者以外の第三者については、'''同法第467条の規定'''による確定日付のある証書による通知があったものとみなす。この場合においては、当該登記の日付をもって確定日付とする。 **#前項に規定する登記(以下「債権譲渡登記」という。)がされた場合において、当該債権の譲渡及びその譲渡につき債権譲渡登記がされたことについて、譲渡人若しくは譲受人が当該債権の債務者に[[動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律第11条|第11条第2項]]に規定する登記事項証明書を交付して通知をし、又は当該債務者が承諾をしたときは、当該債務者についても、前項と同様とする。 **#債権譲渡登記がされた場合においては、[[民法第466条の6|民法第466条の6【将来債権の譲渡性】第3項]]、[[民法第468条|第468条【債権の譲渡における債務者の抗弁】第1項]]並びに[[民法第469条|第469条【債権の譲渡における相殺権】第1項及び第2項]]の規定は、前項に規定する場合に限り適用する。この場合において、[[民法第466条の6|同法第466条の6第3項]]中「譲渡人が次条」とあるのは「譲渡人若しくは譲受人が動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律(平成10年法律第104号)第4条第2項」と、「同条」とあるのは「同項」とする。 **#第1項及び第2項の規定は当該債権の譲渡に係る[[動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律第10条|第10条第1項第2号]]に掲げる事由に基づいてされた債権譲渡登記の抹消登記について、[[民法第468条|民法第468条第1項]]並びに[[民法第469条|第469条第1項及び第2項]]の規定はこの項において準用する第2項に規定する場合について、それぞれ準用する。この場合において、[[民法第468条|同法第468条第1項]]中「対抗要件具備時」とあるのは「動産及び債権の譲渡の対抗要件に関する民法の特例等に関する法律第4条第4項において準用する同条第2項に規定する通知又は承諾がされた時(以下「対抗要件具備時」という。)」と、同項並びに同法第四百六十九条第一項及び第二項中「譲渡人」とあるのは「譲受人」と、「譲受人」とあるのは「譲渡人」と読み替えるものとする。 ==判例== #[https://www.courts.go.jp/hanrei/57501/detail2/index.html 無記名定期預金請求](最高裁判決  昭和32年12月19日)[[民法第86条]]3項,[[民法第505条]],[[民法第666条]] ##'''いわゆる無記名定期預金債権の性質''' ##:いわゆる無記名定期預金債権は無記名債権でなく指名債権に属する。 ##'''無記名定期預金の債権者の判定''' ##:甲が乙に金員を交付して甲のため無記名定期預金の預入れを依頼し、よつて乙がその金員を無記名定期預金として預入れた場合、乙において右金員を横領し自己の預金としたものでない以上、その預入れにあたり、乙が、届出印鑑として乙の氏を刻した印鑑を使用し、相手方の銀行が、かねて乙を知つており、届出印鑑を判読して預金者を乙と考え、預金元帳にも乙を預金者と記載した事実があつたとしても、右無記名定期預金の債権者は乙でなく、甲と認めるのが相当である。 ##'''無記名定期預金の債権者でない者が単に届出印鑑を使用してなした相殺の効力''' ##:右無記名定期預金において、相手方の銀行は、無記名定期預金証書と届出印鑑を呈示した者に支払をすることにより免責される旨の特約がなされている場合、届出印鑑のみを提出した乙との間に、右無記名定期預金と乙の銀行に対する債務と相殺する旨の合意をしても、右銀行はこれによつて、甲に対する無記名定期預金払戻債務につき、免責を得るものではない。 #[https://www.courts.go.jp/hanrei/53626/detail2/index.html 不動産所有権移転登記手続請求](最高裁判決  昭和35年04月26日)[[民法第579条]],[[民法第581条]]1項,[[民法第129条]] ##'''買戻特約の登記をしなかつた場合における不動産買戻権譲渡の方法''' ##:買戻の特約を登記しなかつた場合、不動産買戻権は売主の地位と共にのみ譲渡することができる。 ##'''買戻特約の登記をしなかつた場合における不動産買戻権譲渡の対抗要件''' ##:買戻の特約を登記しなかつた場合における不動産買戻権の譲渡を買主に対抗するには、これに対する通知またはその承諾を必要とし且つこれをもつて足りる。 #[https://www.courts.go.jp/hanrei/52930/detail2/index.html 強制執行異議](最高裁判決 昭和35年11月24日)[[民法第556条]],不動産登記法(旧法)第2条,不動産登記法(旧法)第7条(→[[不動産登記法第105条]]) ##'''仮登記によつて保全された不動産売買予約上の権利の譲渡と対抗要件''' ##:不動産売買予約上の権利を仮登記によつて保全した場合に、右予約上の権利の譲渡を予約義務者その他の第三者に対抗するためには、仮登記に権利移転の附記登記をすれば足り、債権譲渡の対抗要件を具備する心要はないと解すべきである。 ##'''売買予約上の権利の譲渡以前になされた仮差押の効力''' ##:右の場合において、仮登記後附記登記前に第三者により仮差押の登記がなされたとしても、その後右不動産につき売買予約完結の意思表示がなされ、これに基いて所有権移転の本登記がなされた以上、仮差押債権者はその仮差押をもつて所有権取得者に対抗することはできない。 #<span id="譲渡予約"/>[https://www.courts.go.jp/hanrei/54077/detail2/index.html 転付金請求](最高裁判決 昭和43年08月02日)[[民法第466条]],[[民法第560条]] #;他人の有する債権を譲渡する契約をしてその譲渡通知をした者がその後同債権を取得した場合における右譲渡および通知の効力 #:他人の有する債権を譲渡する契約をし、その債権の債務者に対して確定日附のある譲渡通知をした者が、その後同債権を取得した場合には、なんらの意思表示を要しないで、当然に同債権は譲受人に移転し、右譲受人は、同債権の譲受をもつて、その後右譲渡人から同債権の譲渡を受けた第三者に対抗することができる。 #[https://www.courts.go.jp/hanrei/52077/detail2/index.html 約束手形金請求](最高裁判決 昭和49年02月28日)[[手形法第11条]] #;裏書によらない手形債権の譲渡の性質 #:約束手形の受取人甲が、乙からその手形の割引を受け、裏書をしないでこれを乙に交付したときは、甲は、指名債権譲渡の方法によつて乙に右手形債権を譲渡したものと解するのが相当である。 #<span id="二重譲渡"/>[https://www.courts.go.jp/hanrei/52087/detail2/index.html 第三者異議](最高裁判決 昭和49年03月07日) ##'''指名債権の二重譲渡と優劣の基準''' ##:指名債権が二重に譲渡された場合、譲受人相互の問の優劣は、確定日付ある通知が債務者に到達した日時又は確定日付ある債務者の承諾の日時の先後によつて決せられる。 ##'''民法467条2項の確定日付ある通知と認められた事例''' ##:債権者が、債権譲渡証書に確定日付を受け、これを即日短時間内に債務者に交付したときは、民法467条2項所定の確定日付ある通知があつたものと認めることができる。 #[https://www.courts.go.jp/hanrei/53317/detail2/index.html 譲受債権](最高裁判決 昭和55年01月11日) #;指名債権が二重に譲渡され確定日付のある各譲渡通知が同時に債務者に到達した場合における譲受人の一人からする弁済請求 #:指名債権が二重に譲渡され、確定日付のある各譲渡通知が同時に債務者に到達したときは、各譲受人は、債務者に対しそれぞれの譲受債権全額の弁済を請求することができ、譲受人の一人から弁済の請求を受けた債務者は、他の譲受人に対する弁済その他の債務消滅事由が存在しない限り、弁済の責を免れることができない。 #[https://www.courts.go.jp/hanrei/52158/detail2/index.html 供託金還付同意](最高裁判決 昭和58年06月30日)[[民法第364条]]1項 #;指名債権に対する質権設定を第三者に対抗しうる要件としての第三債務者に対する通知又はその承諾と質権者特定の要否 #:指名債権に対する質権設定を第三者に対抗しうる要件としての第三債務者に対する通知又はその承諾は、具体的に特定された者に対する質権設定についてされることを要する。 #[https://www.courts.go.jp/hanrei/52164/detail2/index.html 運送代金](最高裁判決 昭和61年04月11日)[[旧・民事訴訟法第232条|民事訴訟法(旧)第232条]]、[[民法第478条]] ##'''指名債権が二重に譲渡された場合に対抗要件を後れて具備した譲受人に対してされた弁済と民法478条の適用''' ##:指名債権が二重に譲渡された場合に、民法467条2項所定の対抗要件を後れて具備した譲受人に対してされた弁済についても、同法478条の適用がある。 ##'''二重に譲渡された指名債権の債務者が対抗要件を後れて具備した譲受人に対してした弁済について過失がないというための要件''' ##:二重に譲渡された指名債権の債務者が民法467条2項所定の対抗要件を後れて具備した譲受人を真の債権者であると信じてした弁済について過失がないというためには、対抗要件を先に具備した譲受人の債権譲受又は対抗要件に瑕疵があるためその効力を生じないと誤信してもやむを得ない事情があるなど対抗要件を後れて具備した譲受人を真の債権者であると信ずるにつき相当な理由があることを要する。 #[https://www.courts.go.jp/hanrei/56364/detail2/index.html 供託金還付請求権確認請求本訴、同反訴](最高裁判決 平成5年03月30日)国税徴収法62条,国税徴収法67条 ##'''同一の債権について差押通知と確定日付のある譲渡通知との第三債務者への到達の先後関係が不明である場合における差押債権者と債権譲受人との間の優劣''' ##:同一の債権について、差押通知と確定日付のある譲渡通知との第三債務者への到達の先後関係が不明である場合、差押債権者と債権譲受人とは、互いに自己が優先的地位にある債権者であると主張することができない。 ##'''同一の債権について差押通知と確定日付のある譲渡通知との第三債務者への到達の先後関係が不明である場合と当該債権に係る供託金の還付請求権の帰属''' ##:同一の債権について、差押通知と確定日付のある譲渡通知との第三債務者への到達の先後関係が不明であるため、第三債務者が債権額に相当する金員を供託した場合において、被差押債権額と譲受債権額との合計額が右供託金額を超過するときは、差押債権者と債権譲受人は、被差押債権額と譲受債権額に応じて供託金額を案分した額の供託金還付請求権をそれぞれ分割取得する。 #[https://www.courts.go.jp/hanrei/57072/detail2/index.html ゴルフ会員権地位確認請求本訴、同等請求反訴](最高裁判決 平成8年07月12日) #;預託金会員制ゴルフクラブの会員権の譲渡を第三者に対抗するための要件 #:預託金会員制ゴルフクラブの会員権の譲渡をゴルフ場経営会社以外の第三者に対抗するには、指名債権の譲渡の場合に準じて、譲渡人が確定日付のある証書によりこれをゴルフ場経営会社に通知し、又はゴルフ場経営会社が確定日付のある証書によりこれを承諾することを要し、かつ、そのことをもって足りる。 #[https://www.courts.go.jp/hanrei/52812/detail2/index.html 取立債権](最高裁判決 平成10年01月30日) [[民法第304条]],[[民法第372条]] #;抵当権者による物上代位権の行使と目的債権の譲渡 #:抵当権者は、物上代位の目的債権が譲渡され第三者に対する対抗要件が備えられた後においても、自ら目的債権を差し押さえて物上代位権を行使することができる。 #:*(原審判断) #:*:民法304条1項ただし書が払渡し又は引渡しの前の差押えを必要とする趣旨は、差押えによって物上代位の目的債権の特定性を保持し、これによって物上代位権の効力を保全するとともに、第三者が不測の損害を被ることを防止することにあり、この第三者保護の趣旨に照らせば、払渡し又は引渡しの意味は債務者(物上保証人を含む。)の責任財産からの逸出と解すべきであり、債権譲渡も払渡し又は引渡しに該当するということができるから、目的債権について、物上代位による差押えの前に対抗要件を備えた債権譲受人に対しては物上代位権の優先権を主張することができず、このことは目的債権が将来発生する賃料債権である場合も同様である。 #:*(最高裁判断) #:*:民法372条において準用する304条1項ただし書が抵当権者が物上代位権を行使するには払渡し又は引渡しの前に差押えをすることを要するとした趣旨目的は、主として、抵当権の効力が物上代位の目的となる債権にも及ぶことから、右債権の債務者(以下「第三債務者」という。)は、右債権の債権者である抵当不動産の所有者(以下「抵当権設定者」という。)に弁済をしても弁済による目的債権の消滅の効果を抵当権者に対抗できないという不安定な地位に置かれる可能性があるため、差押えを物上代位権行使の要件とし、第三債務者は、差押命令の送達を受ける前には抵当権設定者に弁済をすれば足り、右弁済による目的債権消滅の効果を抵当権者にも対抗することができることにして、二重弁済を強いられる危険から第三債務者を保護するという点にあると解される。 #:*:右のような民法304条1項の趣旨目的に照らすと、同項の「払渡又ハ引渡」には債権譲渡は含まれず、抵当権者は、物上代位の目的債権が譲渡され第三者に対する対抗要件が備えられた後においても、自ら目的債権を差し押さえて物上代位権を行使することができるものと解するのが相当である。 #[https://www.courts.go.jp/hanrei/63060/detail2/index.html 第三者異議](最高裁判決 平成10年2月10日)[[民法第304条]]、[[民法第372条]] #*詳細:[[民法第372条#最高裁判決平成10年2月10日]] #;抵当権者による物上代位権の行使と目的債権の譲渡 #:抵当権者は、物上代位の目的債権が譲渡され第三者に対する対抗要件が備えられた後においても、自ら目的債権を差し押さえて物上代位権を行使することができる。 #[https://www.courts.go.jp/hanrei/52223/detail2/index.html 取立債権請求事件](最高裁判決 平成13年11月27日)[[民法第556条]] #;指名債権譲渡の予約についての確定日付のある証書による債務者に対する通知又は債務者の承諾をもって予約の完結による債権譲渡の効力を第三者に対抗することの可否 #:指名債権譲渡の予約についてされた確定日付のある証書による債務者に対する通知又は債務者の承諾をもって,当該予約の完結による債権譲渡の効力を第三者に対抗することはできない。 #:*譲渡予約については確定日付ある証書により債務者の承諾を得たものの,予約完結権の行使による債権譲渡について第三者に対する対抗要件を具備していない譲受人は,債権の譲受けを第三者に対抗することはできない。 ---- {{前後 |[[コンメンタール民法|民法]] |[[第3編 債権 (コンメンタール民法)|第3編 債権]]<br> [[第3編 債権 (コンメンタール民法)#1|第1章 総則]]<br> [[第3編 債権 (コンメンタール民法)#1-4|第4節 債権の譲渡]] |[[民法第466条]]<br>(債権の譲渡性) |[[民法第468条]]<br>(債権の譲渡における債務者の抗弁) }} {{stub|law}} [[category:民法|467]] [[category:民法 2017年改正|467]] 3viyk67fa5vhiwswg659koln8y16p2x 民法第562条 0 5074 304603 304081 2026-10-11T06:08:37Z Tomzo 248 /* 参照条文 */ 304603 wikitext text/x-wiki [[法学]]>[[民事法]]>[[コンメンタール民法]]>[[第3編 債権 (コンメンタール民法)]] {{wikipedia|契約不適合責任}} ==条文== (買主の追完請求権) ;第562条 # 引き渡された目的物が種類、品質又は数量に関して契約の内容に適合しないものであるときは、買主は、売主に対し、目的物の修補、代替物の引渡し又は不足分の引渡しによる履行の追完を請求することができる。ただし、売主は、買主に不相当な負担を課するものでないときは、買主が請求した方法と異なる方法による履行の追完をすることができる。 # 前項の不適合が買主の責めに帰すべき事由によるものであるときは、買主は、同項の規定による履行の追完の請求をすることができない。 ===改正経緯=== 2017年改正により、「'''瑕疵担保責任から契約不適合責任へ'''」の方針の一環として、目的物が契約の趣旨に適合しない場合の買主の売主に対する追完請求権について新設。 [[/契約不適合責任|契約不適合責任]] :「目的物の種類、品質又は数量に関する'''契約不適合'''」に対する担保責任 ::≒「物の隠れたる瑕疵([[民法第570条#改正経緯|旧・第570条]])」+「数量の不足又は物の一部滅失([[民法第565条#改正経緯|旧・第565条]])」に対する担保責任 *本条 買主の追完請求権 *[[民法第563条|第563条]] 買主の代金減額請求権 *[[民法第564条|第564条]] 買主の解除権/損害賠償請求 ====改正前規定==== 改正前は、「他人の権利の売買における善意の売主の解除権」について定めていたが、他人物売買に関する以下の一連の条項について、基本的な規律を維持しつつ[[民法第561条|第561条]](他人の権利の売買における売主の義務)に集約し、個別の事項については、広範に認められるようになった「解除権」の行使などによることとした。 [[民法第561条/他人物売買|他人物売買]] *[[民法第560条#改正経緯|第560条]](他人の権利の売買における売主の義務) *[[民法第561条#改正経緯|第561条]](他人の権利の売買における売主の担保責任) *本条(他人の権利の売買における善意の売主の解除権) *#''売主が契約の時においてその売却した権利が自己に属しないことを知らなかった場合において、その権利を取得して買主に移転することができないときは、売主は、損害を賠償して、契約の解除をすることができる。'' *#''前項の場合において、買主が契約の時においてその買い受けた権利が売主に属しないことを知っていたときは、売主は、買主に対し、単にその売却した権利を移転することができない旨を通知して、契約の解除をすることができる。'' *[[民法第563条#改正経緯|第563条]](権利の一部が他人に属する場合における売主の担保責任) *[[民法第564条#改正経緯|第564条]](権利の一部が他人に属する場合における売主の担保責任) ==解説== ==参照条文== *[[商法第526条]](買主による目的物の検査及び通知)- 商行為における、受領時のいわゆる「検査義務」。契約不適合責任への移行により、受領側の検査責任は重くなった。 ==関連法令== *[[住宅の品質確保の促進等に関する法律]] **[[住宅の品質確保の促進等に関する法律第1条|同法第1条]](目的) **:この法律は、住宅の性能に関する表示基準及びこれに基づく評価の制度を設け、住宅に係る紛争の処理体制を整備するとともに、'''新築住宅の請負契約又は売買契約における瑕疵担保責任'''について特別の定めをすることにより、住宅の品質確保の促進、住宅購入者等の利益の保護及び住宅に係る紛争の迅速かつ適正な解決を図り、もって国民生活の安定向上と国民経済の健全な発展に寄与することを目的とする。 **[[住宅の品質確保の促進等に関する法律第2条|同法第2条]](定義)第5項 **:この法律において「瑕疵」とは、種類又は品質に関して契約の内容に適合しない状態をいう。 **[[住宅の品質確保の促進等に関する法律第94条]](住宅の新築工事の請負人の瑕疵担保責任の特例) **[[住宅の品質確保の促進等に関する法律第95条]](新築住宅の売主の瑕疵担保責任) *[[特定住宅瑕疵担保責任の履行の確保等に関する法律]] **[[特定住宅瑕疵担保責任の履行の確保等に関する法律第1条|同法第1条]](目的) **:この法律は、国民の健康で文化的な生活にとって不可欠な基盤である住宅の備えるべき安全性その他の品質又は性能を確保するためには、住宅の瑕疵の発生の防止が図られるとともに、住宅に瑕疵があった場合においてはその瑕疵担保責任が履行されることが重要であることにかんがみ、建設業者による住宅建設瑕疵担保保証金の供託、宅地建物取引業者による住宅販売瑕疵担保保証金の供託、住宅瑕疵担保責任保険法人の指定及び住宅瑕疵担保責任保険契約に係る新築住宅に関する紛争の処理体制等について定めることにより、[[住宅の品質確保の促進等に関する法律|住宅の品質確保の促進等に関する法律(平成11年法律第81号。以下「住宅品質確保法」という。)]]と相まって、住宅を新築する建設工事の発注者及び新築住宅の買主の利益の保護並びに円滑な住宅の供給を図り、もって国民生活の安定向上と国民経済の健全な発展に寄与することを目的とする。 **[[特定住宅瑕疵担保責任の履行の確保等に関する法律第2条|同法第2条]](定義) ***同条第2項 ***:この法律において「瑕疵」とは、[[住宅の品質確保の促進等に関する法律第2条|住宅品質確保法第2条第5項]]に規定する瑕疵をいう。 ***同条第5項 ***:この法律において「特定住宅瑕疵担保責任」とは、[[住宅の品質確保の促進等に関する法律第94条|住宅品質確保法第94条第1項]]又は[[住宅の品質確保の促進等に関する法律第95条|第95条第1項]]の規定による担保の責任をいう。 ==判例== ===瑕疵担保責任・数量等不足担保責任におけるもの=== # [https://www.courts.go.jp/hanrei/52876/detail2/index.html 商品代金請求] (最高裁判決 昭和33年06月14日)[[民法第95条]],[[民法第696条]] ##'''和解が要素の錯誤によつて無効とされた事例''' ##:仮差押の目的となつているジヤムが一定の品質を有することを前提として和解契約をなしたところ、右ジヤムが原判示の如き粗悪品であつたときは、右和解は要素に錯誤があるものとして無効であると解すべきである ##'''契約の要素に錯誤があつた場合と民法570条(旧)の適用の有無''' ##:契約の要素に錯誤があつて無効であるときは、民法570条(旧)の瑕疵担保の規定の適用は排除される #[https://www.courts.go.jp/hanrei/52879/detail2/index.html 約束手形金請求] (最高裁判決  昭和36年12月15日)[[民法第415条]],[[民法第541条]] #:;不特定物の売買における目的物受領後の不完全履行による契約解除の可否。 #::不特定物の売買において給付されたものに瑕疵のあることが受領後に発見された場合、買主がいわゆる瑕疵担保責任を問うなど、瑕疵の存在を認識した上で右給付を履行として容認したと認められる事情が存しない限り、買主は、取替ないし追完の方法による完全履行の請求権を有し、また、その不完全な給付が売主の責に帰すべき事由に基づくときは、債務不履行の一場合として、損害賠償請求権および契約解除権をも有するものと解すべきである。 #[https://www.courts.go.jp/hanrei/57773/detail2/index.html 手付金返還請求](最高裁判決 昭和41年4月14日) #;売買の目的土地の大部分が都市計画街路の境域内に存するために<u>売買の目的物に隠れた瑕疵</u>があるとされた事例。 #:買主が原判示規模の居宅(原判決理由参照)の敷地として使用する目的を表示して買い受けた土地の約8割の部分が都市計画街路の境域内に存するため、たとえ買主が右居宅を建築しても、早晩、都市計画事業の実施により、その全部または一部を撤去しなければならない場合において、右計画街路の公示が、売買契約成立の10数年以前に、告示の形式でなされたものであるため、買主において買受土地中の前記部分が右計画街路の境域内に存することを知らなかつたことについて過失があるといえないときは、売買の目的物に隠れた瑕疵があると解するのが相当である。 #[https://www.courts.go.jp/hanrei/54036/detail2/index.html 土地引渡請求](最高裁判決 昭和43年8月20日) #;宅地の売買がいわゆる数量指示売買ではないとされた事例 #:いわゆる数量指示売買とは、当事者において目的物の実際に有する数量を確保するため、その一定の面積、容積、重量、員数または尺度あることを売主が契約において表示し、かつ、この数量を基礎として代金額が定められた売買をいい、宅地の売買においてその目的物を登記簿に記載してある字地番地目および坪数をもつて表示したとしても、直ちに売主が右坪数のあることを表示したものというべきではない。 #(参考)[https://www.courts.go.jp/hanrei/62049/detail2/index.html 売掛代金請求](最高裁判例 昭和47年01月25日)[[民法第415条]],[[商法第526条]] #;商人間の不特定物を目的とする売買における不完全履行と代物請求権 #:商人間の不特定物を目的とする売買において、瑕疵のある物が給付された場合においても、商法526条1項の適用の結果、買主において契約を解除しえず、また損害の賠償をも請求しえなくなつたのちにおいては、買主は売主に対し、もはや完全な給付を請求することはできないものと解すべきである。 #:*2017年改正により、不特定物を区分する実益は消滅、但し、商事売買における検査期間徒過後の請求不能については維持 #[https://www.courts.go.jp/hanrei/54242/detail2/index.html 損害賠償](最高裁判決 昭和57年1月21日) #;面積を表示して売買された土地が表示どおりの面積を有しない場合と売主の買主に対する履行利益の賠償義務の有無 #:土地の売買契約において、土地の面積が表示された場合でも、その表示が代金額決定の基礎としてされたにとどまり契約の目的を達成するうえで特段の意味を有するものでないときは、売主は、当該土地が表示どおりの面積を有したとすれば買主が得たであろう利益について、その損害を賠償すべき責めを負わない。 #[https://www.courts.go.jp/hanrei/52741/detail2/index.html 損害賠償](最高裁判決 平成3年4月2日) #;敷地賃借権付き建物の売買における敷地の欠陥と売買目的物の隠れた瑕疵 #:建物とその敷地の賃借権とが売買の目的とされた場合において、賃貸人が修繕義務を負担すべき敷地の欠陥は、売買の目的物の隠れた瑕疵ではない。 #:*右の場合において、建物と共に売買の目的とされたものは、建物の敷地そのものではなく、その賃借権であるところ、敷地の面積の不足、敷地に関する法的規制又は賃貸借契約における使用方法の制限等の客観的事由によって賃借権が制約を受けて売買の目的を達することができないときは、建物と共に売買の目的とされた賃借権に瑕疵があると解する余地があるとしても、賃貸人の修繕義務の履行により補完されるべき敷地の欠陥については、賃貸人に対してその修繕を請求すべきものであって、右敷地の欠陥をもって賃貸人に対する債権としての賃借権の欠陥ということはできないから、買主が、売買によって取得した賃借人たる地位に基づいて、賃貸人に対して、右修繕義務の履行を請求し、あるいは賃貸借の目的物に隠れた瑕疵があるとして瑕疵担保責任を追求することは格別、売買の目的物に瑕疵があるということはできない。 #[https://www.courts.go.jp/hanrei/52295/detail2/index.html 債務不存在確認請求本訴,不当利得請求反訴事件] (最高裁判決 平成13年11月27日) #;いわゆる数量指示売買において数量が超過する場合に民法565条(旧)を類推適用して売主が代金の増額を請求することの可否 #:いわゆる数量指示売買において数量が超過する場合,売主は民法565条(旧)の類推適用を根拠として代金の増額を請求することはできない。 #:*いわゆる数量指示売買において数量が超過する場合,買主において超過部分の代金を追加して支払うとの趣旨の合意を認め得るときに売主が追加代金を請求し得ることはいうまでもない。しかしながら,同条は数量指示売買において数量が不足する場合又は物の一部が滅失していた場合における売主の担保責任を定めた規定にすぎないから,数量指示売買において数量が超過する場合に,同条の類推適用を根拠として売主が代金の増額を請求することはできない。 #[https://www.courts.go.jp/hanrei/80250/detail2/index.html 損害賠償請求,民訴法260条2項の申立て事件](最高裁判決 平成22年6月1日) #;売買契約の目的物である土地の土壌に,上記売買契約締結後に法令に基づく規制の対象となったふっ素が基準値を超えて含まれていたことが,民法570条(旧)にいう瑕疵に当たらないとされた事例 #:売買契約の目的物である土地の土壌に,上記売買契約締結後に法令に基づく規制の対象となったふっ素が基準値を超えて含まれていたことは,(1)上記<u>売買契約締結当時の取引観念上</u>,ふっ素が土壌に含まれることに起因して人の健康に係る被害を生ずるおそれがあるとは認識されておらず,(2)上記売買契約の当事者間において,上記土地が備えるべき属性として,その土壌に,ふっ素が含まれていないことや,上記売買契約締結当時に有害性が認識されていたか否かにかかわらず,人の健康に係る被害を生ずるおそれのある一切の物質が含まれていないことが,特に予定されていたとみるべき事情もうかがわれないなど判示の事情の下においては,民法570条(旧)にいう瑕疵に当たらない。 #:*<u>売買契約の当事者間において目的物がどのような品質・性能を有することが予定されていたかについては,'''売買契約締結当時の取引観念'''をしんしゃくして判断すべき</u>。 ---- {{前後 |[[コンメンタール民法|民法]] |[[第3編 債権 (コンメンタール民法)|第3編 債権]]<br> [[第3編 債権 (コンメンタール民法)#2|第2章 契約]]<br> [[第3編 債権 (コンメンタール民法)#2-3|第3節 売買]] |[[民法第561条]]<br>(他人の権利の売買における売主の義務) |[[民法第563条]]<br>(買主の代金減額請求権) }} {{stub|law}} [[category:民法|562]] [[category:民法 2017年改正|562]] e3ye2midzp63xuf7c7u27pdbx4s9vqc Transwiki:拡張子一覧 0-9 100 8329 304630 35456 2026-10-11T11:55:12Z Xqbot 85869 「[[拡張子ハンドブック/0-9]]」から「[[拡張子ハンドブック#0-9]]」への二重転送を修正 304630 wikitext text/x-wiki #転送 [[拡張子ハンドブック#0-9]] 6zszxvelpaj6gttoyzn6j0do93doiun Transwiki:拡張子一覧 B 100 8331 304631 35459 2026-10-11T11:55:17Z Xqbot 85869 「[[拡張子ハンドブック/B]]」から「[[拡張子ハンドブック#B]]」への二重転送を修正 304631 wikitext text/x-wiki #転送 [[拡張子ハンドブック#B]] 0v4kei6jmf1tc734zcy610arl2dvvy8 ファイル名の拡張子/0-9 0 8506 304628 35445 2026-10-11T11:55:02Z Xqbot 85869 「[[拡張子ハンドブック/0-9]]」から「[[拡張子ハンドブック#0-9]]」への二重転送を修正 304628 wikitext text/x-wiki #転送 [[拡張子ハンドブック#0-9]] 6zszxvelpaj6gttoyzn6j0do93doiun ファイル名の拡張子/B 0 8508 304629 35449 2026-10-11T11:55:07Z Xqbot 85869 「[[拡張子ハンドブック/B]]」から「[[拡張子ハンドブック#B]]」への二重転送を修正 304629 wikitext text/x-wiki #転送 [[拡張子ハンドブック#B]] 0v4kei6jmf1tc734zcy610arl2dvvy8 Transwiki:拡張子一覧 E 100 8552 304632 35851 2026-10-11T11:55:22Z Xqbot 85869 「[[拡張子ハンドブック/E]]」から「[[拡張子ハンドブック#E]]」への二重転送を修正 304632 wikitext text/x-wiki #転送 [[拡張子ハンドブック#E]] mv56u54q6vcfid28m9u2x59z7mhe5i0 Transwiki:拡張子一覧 F 100 8582 304633 36121 2026-10-11T11:55:27Z Xqbot 85869 「[[拡張子ハンドブック/F]]」から「[[拡張子ハンドブック#F]]」への二重転送を修正 304633 wikitext text/x-wiki #転送 [[拡張子ハンドブック#F]] 2itde1w82rspf8nkjmte00iiiiyipi0 Transwiki:拡張子一覧 G 100 8642 304634 36682 2026-10-11T11:55:32Z Xqbot 85869 「[[拡張子ハンドブック/G]]」から「[[拡張子ハンドブック#G]]」への二重転送を修正 304634 wikitext text/x-wiki #転送 [[拡張子ハンドブック#G]] hpi75qh2kzjr76fnt05xvhiygrpi5yn Transwiki:拡張子一覧 H 100 8643 304635 36684 2026-10-11T11:55:37Z Xqbot 85869 「[[拡張子ハンドブック/H]]」から「[[拡張子ハンドブック#H]]」への二重転送を修正 304635 wikitext text/x-wiki #転送 [[拡張子ハンドブック#H]] b0u4r5akbutt34rq4fdn2ldaj7mkpcc Transwiki:拡張子一覧 I 100 8644 304636 36686 2026-10-11T11:55:42Z Xqbot 85869 「[[拡張子ハンドブック/I]]」から「[[拡張子ハンドブック#I]]」への二重転送を修正 304636 wikitext text/x-wiki #転送 [[拡張子ハンドブック#I]] kfvu0a2gq44dvaixlo0yab8j33a989v Transwiki:拡張子一覧 J 100 8645 304637 36688 2026-10-11T11:55:47Z Xqbot 85869 「[[拡張子ハンドブック/J]]」から「[[拡張子ハンドブック#J]]」への二重転送を修正 304637 wikitext text/x-wiki #転送 [[拡張子ハンドブック#J]] fr2nlueekvpk95pxef146hl2wnxa1fm Transwiki:拡張子一覧 K 100 8646 304638 36690 2026-10-11T11:55:52Z Xqbot 85869 「[[拡張子ハンドブック/K]]」から「[[拡張子ハンドブック#K]]」への二重転送を修正 304638 wikitext text/x-wiki #転送 [[拡張子ハンドブック#K]] a0m94rhrk2048o0wb6d5ki0t6wohchs Transwiki:拡張子一覧 L 100 8691 304639 37168 2026-10-11T11:55:57Z Xqbot 85869 「[[拡張子ハンドブック/L]]」から「[[拡張子ハンドブック#L]]」への二重転送を修正 304639 wikitext text/x-wiki #転送 [[拡張子ハンドブック#L]] 42up57qx5h29xzy1ux1xw3gw9hgsyuk Transwiki:拡張子一覧 N 100 8693 304640 37172 2026-10-11T11:56:02Z Xqbot 85869 「[[拡張子ハンドブック/N]]」から「[[拡張子ハンドブック#N]]」への二重転送を修正 304640 wikitext text/x-wiki #転送 [[拡張子ハンドブック#N]] hrkdbzrpkhl4gmm0k4pl763vdes9v5l Transwiki:拡張子一覧 Q 100 8735 304641 37518 2026-10-11T11:56:07Z Xqbot 85869 「[[拡張子ハンドブック/Q]]」から「[[拡張子ハンドブック#Q]]」への二重転送を修正 304641 wikitext text/x-wiki #転送 [[拡張子ハンドブック#Q]] 5vo2dd5k0ivt2jlqs5bm2wnlenbd2vn Transwiki:拡張子一覧 R 100 8736 304642 37521 2026-10-11T11:56:12Z Xqbot 85869 「[[拡張子ハンドブック/R]]」から「[[拡張子ハンドブック#R]]」への二重転送を修正 304642 wikitext text/x-wiki #転送 [[拡張子ハンドブック#R]] su3iwizmxjk4af4kr6ucupkz4aod9zc Transwiki:拡張子一覧 U 100 8739 304643 37528 2026-10-11T11:56:17Z Xqbot 85869 「[[拡張子ハンドブック/U]]」から「[[拡張子ハンドブック#U]]」への二重転送を修正 304643 wikitext text/x-wiki #転送 [[拡張子ハンドブック#U]] rdx9m7crm31p64zdgnpq7sugjt68s3t Transwiki:拡張子一覧 W 100 8759 304644 37663 2026-10-11T11:56:22Z Xqbot 85869 「[[拡張子ハンドブック/W]]」から「[[拡張子ハンドブック#W]]」への二重転送を修正 304644 wikitext text/x-wiki #転送 [[拡張子ハンドブック#W]] 8gsm5j83t7jt4jkze4jl4y3y659zgim Transwiki:拡張子一覧 Y 100 8761 304645 37667 2026-10-11T11:56:27Z Xqbot 85869 「[[拡張子ハンドブック/Y]]」から「[[拡張子ハンドブック#Y]]」への二重転送を修正 304645 wikitext text/x-wiki #転送 [[拡張子ハンドブック#Y]] tbdptisa0riyxq7ad9jgmnvuhu2upzu Transwiki:拡張子一覧 Z 100 8762 304646 37669 2026-10-11T11:56:32Z Xqbot 85869 「[[拡張子ハンドブック/Z]]」から「[[拡張子ハンドブック#Z]]」への二重転送を修正 304646 wikitext text/x-wiki #転送 [[拡張子ハンドブック#Z]] 21saykfemhfiq28zv8l8qko5hnpq9g4 住宅の品質確保の促進等に関する法律第95条 0 10980 304610 282501 2026-10-11T07:27:09Z Tomzo 248 /* 解説 */ 304610 wikitext text/x-wiki [[法学]]>[[コンメンタール住宅の品質確保の促進等に関する法律]]>[[住宅の品質確保の促進等に関する法律第95条]] ==条文== (新築住宅の売主の瑕疵担保責任の特例) ;第95条   #新築住宅の売買契約においては、売主は、買主に引き渡した時(当該新築住宅が住宅新築請負契約に基づき請負人から当該売主に引き渡されたものである場合にあっては、その引渡しの時)から十年間、住宅の構造耐力上主要な部分等の瑕疵について、[[民法第415条]]、[[民法第541条|第541条]]、[[民法第542条|第542条]]、[[民法第562条|第562条]]及び[[民法第563条|第563条]]に規定する担保の責任を負う。 #前項の規定に反する特約で買主に不利なものは、無効とする。 #第1項の場合における[[民法第566条]]の規定の適用については、同条中「種類又は品質に関して契約の内容に適合しない」とあるのは「住宅の品質確保の促進等に関する法律(平成十一年法律第八十一号)第95条第一項に規定する瑕疵がある」と、「不適合」とあるのは「瑕疵」とする。 ====改正経緯==== 2017年民法改正に伴い、適用する民法条項の対応を改正。 改正前第1項は以下の通り(下線部が改正箇所)。 :新築住宅の売買契約においては、売主は、買主に引き渡した時(当該新築住宅が住宅新築請負契約に基づき請負人から当該売主に引き渡されたものである場合にあっては、その引渡しの時)から十年間、住宅の構造耐力上主要な部分等の<u>隠れた</u>瑕疵について、<u>[[民法第570条|民法第570条]]において準用する[[民法第566条|同法第566条第1項]] 並びに[[民法第634条|同法第634条第1項及び第2項前段]]</u>に規定する担保の責任を負う。<u>この場合において、同条第1項及び第2項前段中「注文者」とあるのは「買主」と、同条第1項中「請負人」とあるのは「売主」とする。 </u> ::改正前は新築住宅の売買契約に関する「隠れた瑕疵(引き渡し時に「買主・注文主」が認識していなかった瑕疵)」については、旧民法第570条(瑕疵担保責任)及び旧民法第634条(請負人の責任)が適用され、かつ、その有効期間は特約がなければ、旧第570条が準用する旧[[民法第566条]]第3項に定める1年間ではなく、10年が適用される(第2項で短縮不可)旨定められていた。2017年民法改正に伴い、旧来の瑕疵担保責任について、対象は、「隠れた瑕疵」のみならず「契約の不適合一般」に、効果として「損害賠償請求権」「解除権」「追完請求権」及び「代金減額請求権」の発生が明確に概念されたことにより、適用条項等につき改正された。 改正前第3項は以下の通り(下線部が改正箇所)。 :第1項の場合における民法第566条<u>第3項</u>の規定の適用については、<u>同項中「前二項」とあるのは「住宅の品質確保の促進等に関する法律第95条第1項」と、「又は」とあるのは「、瑕疵修補又は」</u>とする。 ==解説== [[住宅の品質確保の促進等に関する法律第94条|前条]]が、新築住宅を請負建築の場合であるのに対して、本条は、新築住宅に関する売買契約に関して定める。 「住宅の構造耐力上主要な部分等の'''瑕疵'''(2017年改正において「(隠れたる)瑕疵」概念は、概ね[[民法第566条]]に定める「種類又は品質に関して契約の内容に適合しない」こと、即ち「契約不適合」概念となったが、本法においては、継続して「瑕疵」の語を用いる。第3項参照)」については、一定期間(瑕疵担保期間)、品質を担保する義務を認め、その期間も契約不適合責任期間の消滅時効期間である10年を定めている。。 瑕疵が発見されたときに認められる権利は以下のもの。適用については、瑕疵の度合い及びそれに対する売主の態様により、各々認められる。 *[[民法第415条]](債務不履行による損害賠償) *[[民法第541条]](催告による解除) *[[民法第542条]](催告によらない解除) *[[民法第562条]](買主の追完請求権) *[[民法第563条]](買主の代金減額請求権) 特約がなければ、瑕疵担保期間は、「買主に引き渡した時(一般に『工事完了済証』交付年月日)」から10年間である。なお、この期間は特約により変えることができるが、第2項により買主に不利となる短縮はできないため、10年以上となる一方で、[[住宅の品質確保の促進等に関する法律第97条|第97条]]で20年を超えることはできない。 買主はその不適合を知った時から1年以内にその旨を請負人に通知しないときは、その不適合を理由として、履行の追完の請求、報酬の減額の請求、損害賠償の請求及び契約の解除をすることができない([[民法第566条]])。 ==参照条文== ==判例== ---- {{前後 |[[コンメンタール住宅の品質確保の促進等に関する法律|住宅の品質確保の促進等に関する法律]] |[[住宅の品質確保の促進等に関する法律#第7章_瑕疵担保責任_%28第94条~第97条%29|第7章_瑕疵担保責任]]<br> |[[住宅の品質確保の促進等に関する法律第94条|第94条]]<br>(住宅の新築工事の請負人の瑕疵担保責任) |[[住宅の品質確保の促進等に関する法律第96条|第96条]]<br>(一時使用目的の住宅の適用除外) }} {{stub|law}} [[category:住宅の品質確保の促進等に関する法律|95]] [[category:民法 2017年改正|住宅95]] bcn80nhg54mfeq7gjony3i1c4qzvo9f 住宅の品質確保の促進等に関する法律第94条 0 11134 304588 282500 2026-10-11T04:24:19Z Tomzo 248 304588 wikitext text/x-wiki [[法学]]>[[コンメンタール住宅の品質確保の促進等に関する法律]]>[[住宅の品質確保の促進等に関する法律第94条]] ==条文== (住宅の新築工事の請負人の瑕疵担保責任の特例) ;第94条   #住宅を新築する建設工事の請負契約(以下「住宅新築請負契約」という。)においては、請負人は、注文者に引き渡した時から10年間、住宅のうち構造耐力上主要な部分又は雨水の浸入を防止する部分として政令で定めるもの([[住宅の品質確保の促進等に関する法律第95条|次条]]において「住宅の構造耐力上主要な部分等」という。)の瑕疵(構造耐力又は雨水の浸入に影響のないものを除く。[[住宅の品質確保の促進等に関する法律第95条|次条]]において同じ。)について、民法(明治29年法律第89号)[[民法第415条|第415条]]、[[民法第541条|第541条]]及び[[民法第542条|第542条]]並びに同法[[民法第559条|第559条]]において準用する同法[[民法第562条|第562条]]及び[[民法第563条|第563条]]に規定する担保の責任を負う。 #前項の規定に反する特約で注文者に不利なものは、無効とする。 #第1項の場合における[[民法第637条|民法第637条]]の規定の適用については、同条第1項中「前条本文に規定する」とあるのは「[[請負人が住宅の品質確保の促進等に関する法律第94条|請負人が住宅の品質確保の促進等に関する法律(平成11年法律第81号)第94条第1項]]に規定する瑕疵がある目的物を注文者に引き渡した」と、同項及び同条第2項中「不適合」とあるのは「瑕疵」とする。 ===改正経緯=== 2017年民法改正に伴い、適用する民法条項の対応を改正。 改正前第1項は以下の通り(下線部が改正箇所)。 :住宅を新築する建設工事の請負契約(以下「住宅新築請負契約」という。)においては、請負人は、注文者に引き渡した時から十年間、住宅のうち構造耐力上主要な部分又は雨水の浸入を防止する部分として政令で定めるもの(次条において「住宅の構造耐力上主要な部分等」という。)の瑕疵(構造耐力又は雨水の浸入に影響のないものを除く。次条において同じ。)について、<u>[[民法第634条#改正経緯|民法(明治29年法律第89号)第634条第1項 及び第2項 前段]]</u>に規定する担保の責任を負う。 ::改正前は新築住宅の請負契約に関する「'''瑕疵'''」については、旧民法第634条(請負人の担保責任)が適用され、かつ、その有効期間は特約がなければ、旧[[民法第638条#改正経緯|民法第638条]]第1項に定める「石造、土造、れんが造、コンクリート造、金属造その他これらに類する構造の工作物」同様に10年が適用される(第2項で短縮不可)旨定められていた。2017年民法改正に伴い、旧来の瑕疵担保責任について、「契約不適合責任」一般に、効果として「損害賠償請求権」「解除権」「追完請求権」及び「代金減額請求権」の発生が明確に概念されたことにより、適用条項等につき改正された。 改正前第3項は以下の通り(下線部が改正箇所)。 :第1項の場合における<u>[[民法第638条#改正経緯|民法第638条第2項]]の規定の適用については、同項中「前項」とあるのは、「住宅の品質確保の促進等に関する法律第94条第1項」</u>とする。 ::旧民法第634条に定めた「瑕疵修補請求権」は、瑕疵により滅失又は損傷が生じた時から1年以内の行使が求められていた。本項は[[民法第637条|民法第637条]]に継承されている。 ==解説== 住宅については、居住は生活の重要な要素であり、かつ、一般市民にとっては人生最大の買い物と言われるほど家計に大きな影響を与える巨額な支出を伴うものであることが一般的である。また、買主・注文主に比べ売主・請負人は継続的な事業としている場合がほとんどであり、買主・注文主と売主・請負人の経験格差が大きい業務である。このような事情を鑑み、一種消費者保護の観点も加え、「住宅の構造耐力上主要な部分等」の'''瑕疵'''については、一定期間(瑕疵担保期間)、品質を担保する義務を認め、その期間も一般的な契約不適合責任期間の1年よりも相当に長期期間である10年を定めるものである。 本条において、新築建物を請負契約で建設するときの規律を定める。 瑕疵が発見されたときに認められる権利は以下のもの。適用については、瑕疵の度合い及びそれに対する売主の態様により、各々認められる。 *[[民法第415条]](債務不履行による損害賠償) *[[民法第541条]](催告による解除) *[[民法第542条]](催告によらない解除) *[[民法第559条]](有償契約への準用) - 「請負契約」の「売買契約への準用」 *:→[[民法第562条]](買主の追完請求権) *:→[[民法第563条]](買主の代金減額請求権) 特約がなければ、瑕疵担保期間は、注文主に引き渡した時から10年間である。なお、この期間は特約により変えることができるが、第2項により買主に不利となる短縮はできないため、10年以上となる一方で、[[住宅の品質確保の促進等に関する法律第97条|第97条]]で20年を超えることはできない。 注文者はその不適合を知った時から一年以内にその旨を請負人に通知しないときは、その不適合を理由として、履行の追完の請求、報酬の減額の請求、損害賠償の請求及び契約の解除をすることができない([[民法第637条|民法第637条]])。 ==参照条文== *[[住宅の品質確保の促進等に関する法律第97条]](瑕疵担保責任の期間の伸長等の特例) *[[住宅の品質確保の促進等に関する法律施行令第5条]](住宅の構造耐力上主要な部分等) ==関係法令== *[[特定住宅瑕疵担保責任の履行の確保等に関する法律]] ==判例== ---- {{前後 |[[コンメンタール住宅の品質確保の促進等に関する法律|住宅の品質確保の促進等に関する法律]] |[[住宅の品質確保の促進等に関する法律#第7章_瑕疵担保責任_%28第94条~第97条%29|第7章_瑕疵担保責任]]<br> |[[住宅の品質確保の促進等に関する法律第93条|第93条]]<br>(センターへの情報提供等) |[[住宅の品質確保の促進等に関する法律第95条|第95条]]<br>(新築住宅の売主の瑕疵担保責任) }} {{stub|law}} [[category:住宅の品質確保の促進等に関する法律|94]] [[category:民法 2017年改正|住94]] r0sljp6deolyuu534cfezavj4kgbwmh 304624 304588 2026-10-11T11:11:44Z Tomzo 248 /* 解説 */ 304624 wikitext text/x-wiki [[法学]]>[[コンメンタール住宅の品質確保の促進等に関する法律]]>[[住宅の品質確保の促進等に関する法律第94条]] ==条文== (住宅の新築工事の請負人の瑕疵担保責任の特例) ;第94条   #住宅を新築する建設工事の請負契約(以下「住宅新築請負契約」という。)においては、請負人は、注文者に引き渡した時から10年間、住宅のうち構造耐力上主要な部分又は雨水の浸入を防止する部分として政令で定めるもの([[住宅の品質確保の促進等に関する法律第95条|次条]]において「住宅の構造耐力上主要な部分等」という。)の瑕疵(構造耐力又は雨水の浸入に影響のないものを除く。[[住宅の品質確保の促進等に関する法律第95条|次条]]において同じ。)について、民法(明治29年法律第89号)[[民法第415条|第415条]]、[[民法第541条|第541条]]及び[[民法第542条|第542条]]並びに同法[[民法第559条|第559条]]において準用する同法[[民法第562条|第562条]]及び[[民法第563条|第563条]]に規定する担保の責任を負う。 #前項の規定に反する特約で注文者に不利なものは、無効とする。 #第1項の場合における[[民法第637条|民法第637条]]の規定の適用については、同条第1項中「前条本文に規定する」とあるのは「[[請負人が住宅の品質確保の促進等に関する法律第94条|請負人が住宅の品質確保の促進等に関する法律(平成11年法律第81号)第94条第1項]]に規定する瑕疵がある目的物を注文者に引き渡した」と、同項及び同条第2項中「不適合」とあるのは「瑕疵」とする。 ===改正経緯=== 2017年民法改正に伴い、適用する民法条項の対応を改正。 改正前第1項は以下の通り(下線部が改正箇所)。 :住宅を新築する建設工事の請負契約(以下「住宅新築請負契約」という。)においては、請負人は、注文者に引き渡した時から十年間、住宅のうち構造耐力上主要な部分又は雨水の浸入を防止する部分として政令で定めるもの(次条において「住宅の構造耐力上主要な部分等」という。)の瑕疵(構造耐力又は雨水の浸入に影響のないものを除く。次条において同じ。)について、<u>[[民法第634条#改正経緯|民法(明治29年法律第89号)第634条第1項 及び第2項 前段]]</u>に規定する担保の責任を負う。 ::改正前は新築住宅の請負契約に関する「'''瑕疵'''」については、旧民法第634条(請負人の担保責任)が適用され、かつ、その有効期間は特約がなければ、旧[[民法第638条#改正経緯|民法第638条]]第1項に定める「石造、土造、れんが造、コンクリート造、金属造その他これらに類する構造の工作物」同様に10年が適用される(第2項で短縮不可)旨定められていた。2017年民法改正に伴い、旧来の瑕疵担保責任について、「契約不適合責任」一般に、効果として「損害賠償請求権」「解除権」「追完請求権」及び「代金減額請求権」の発生が明確に概念されたことにより、適用条項等につき改正された。 改正前第3項は以下の通り(下線部が改正箇所)。 :第1項の場合における<u>[[民法第638条#改正経緯|民法第638条第2項]]の規定の適用については、同項中「前項」とあるのは、「住宅の品質確保の促進等に関する法律第94条第1項」</u>とする。 ::旧民法第634条に定めた「瑕疵修補請求権」は、瑕疵により滅失又は損傷が生じた時から1年以内の行使が求められていた。本項は[[民法第637条|民法第637条]]に継承されている。 ==解説== 住宅については、居住は生活の重要な要素であり、かつ、一般市民にとっては人生最大の買い物と言われるほど家計に大きな影響を与える巨額な支出を伴うものであることが一般的である。また、買主・注文主に比べ売主・請負人は継続的な事業としている場合がほとんどであり、買主・注文主と売主・請負人の経験格差が大きい業務である。このような事情を鑑み、一種消費者保護の観点も加え、「住宅の構造耐力上主要な部分等」の'''瑕疵'''については、一定期間(瑕疵担保期間)、品質を担保する義務を認め、その期間も一般的な契約不適合責任期間の消滅時効期間に等しい10年を定めるものである。 本条において、新築建物を請負契約で建設するときの規律を定める。 瑕疵が発見されたときに認められる権利は以下のもの。適用については、瑕疵の度合い及びそれに対する売主の態様により、各々認められる。 *[[民法第415条]](債務不履行による損害賠償) *[[民法第541条]](催告による解除) *[[民法第542条]](催告によらない解除) *[[民法第559条]](有償契約への準用) - 「請負契約」の「売買契約への準用」 *:→[[民法第562条]](買主の追完請求権) *:→[[民法第563条]](買主の代金減額請求権) 特約がなければ、瑕疵担保期間は、注文主に引き渡した時から10年間である。なお、この期間は特約により変えることができるが、第2項により買主に不利となる短縮はできないため、10年以上となる一方で、[[住宅の品質確保の促進等に関する法律第97条|第97条]]で20年を超えることはできない。 注文者はその不適合を知った時から1年以内にその旨を請負人に通知しないときは、その不適合を理由として、履行の追完の請求、報酬の減額の請求、損害賠償の請求及び契約の解除をすることができない([[民法第637条|民法第637条]])。 ==参照条文== *[[住宅の品質確保の促進等に関する法律第97条]](瑕疵担保責任の期間の伸長等の特例) *[[住宅の品質確保の促進等に関する法律施行令第5条]](住宅の構造耐力上主要な部分等) ==関係法令== *[[特定住宅瑕疵担保責任の履行の確保等に関する法律]] ==判例== ---- {{前後 |[[コンメンタール住宅の品質確保の促進等に関する法律|住宅の品質確保の促進等に関する法律]] |[[住宅の品質確保の促進等に関する法律#第7章_瑕疵担保責任_%28第94条~第97条%29|第7章_瑕疵担保責任]]<br> |[[住宅の品質確保の促進等に関する法律第93条|第93条]]<br>(センターへの情報提供等) |[[住宅の品質確保の促進等に関する法律第95条|第95条]]<br>(新築住宅の売主の瑕疵担保責任) }} {{stub|law}} [[category:住宅の品質確保の促進等に関する法律|94]] [[category:民法 2017年改正|住94]] 3xecbm7phj4ep7vq1j6vo50s34jyzv1 トランスリンガル図鑑/新型コロナウイルス感染症/英語 0 28023 304568 216229 2026-10-10T20:49:54Z CommonsDelinker 786 [[Commons:User:Jameslwoodward|Jameslwoodward]] によってCommonsから削除された George_Floyd_mural_Mauerpark_Berlin_2020-05-30_03.jpg を除去。理由: per [[:c:Commons:Deletion requests/Files in Category:George Floyd mural Mauerpark Berlin|]]. 304568 wikitext text/x-wiki {{Pathnav|メインページ|語学|トランスリンガル図鑑|新型コロナウイルス感染症|frame=1|small=1}} {| align="center" |- | colspan="2" style="background-color: gray; text-align: center; vertical-align: center; font-size: x-large; font-weight: bold; padding-bottom:10px;"| |- | colspan="2" style="text-align: left; vertical-align: bottom; font-family:Times New Roman; font-size: 20pt; font-weight: bold; "| |- | colspan="2" style="text-align:center;" |[[画像:Remember W-U-H-A-N.svg|600px]] |- | colspan="2" style="text-align:center;" |<span style="font-size:13pt;color:#555;">新型コロナウイルスの発生源である中国・[[w:武漢市|武漢(ウーハン)]]の英語表記 [[w:en:Wuhan|Wuhan]] をもじった感染予防啓発</span> |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" | Remember W-U-H-A-N |W U H A N (ウーハン)と覚えなさい。 |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  W - wash hands | W : 手を洗う |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  U - use mask properly | |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  H - have temperature checked regularly | |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  A - avoid large crowds | |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  N - never touch your face with unclean hands | |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" | | |- | colspan="2" style="background-color: gray; text-align: center; vertical-align: center; font-size: x-large; font-weight: bold; padding-bottom:10px;"| |} == Terminology == <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> === ADE === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:ADE#English|ADE]] : (medicine) Abbreviation of [[#antibody-dependent enhancement (ADE)|#antibody-dependent enhancement]].</span> : [[#antibody-dependent enhancement (ADE)|#antibody-dependent enhancement]] の略語。 === AIDS === === antibody === {{Wikipedia|en:Antibody|Antibody}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:antibody|antibody]] : ([[#immunology|immunology]]) A protein produced by B-lymphocytes that binds to a specific [[#antigen]].</span> *:[[w:抗体|抗体]]    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#anticorps|anticorps]]'''</span>) === antibody-dependent enhancement (ADE) === [[画像:Antibody dependent enhancement-en.svg||thumb|right|250px| In antibody-dependent enhancement, sub-optimal antibodies (the blue Y-shaped structures in the graphic) bind to both viruses and Fc gamma receptors (labeled FcγRII) expressed on immune cells promoting infection of these cells.<br> ]] *<span style="font-family:Times New Roman;font-size:13pt;">[[w:en:Antibody-dependent enhancement|antibody-dependent enhancement]] (ADE) :  /ˈæn.ti.bɑdi/  </span> *:'''[[w:抗体依存性感染増強|抗体依存性感染増強]]'''       :<span style="font-family:Times New Roman;font-size:11pt;">''see also'' [[w:en:COVID-19_misinformation#Antibody-dependent_enhancement|w: COVID-19_misinformation#Antibody-dependent_enhancement]]</span> :(⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#facilitation de l'infection par des anticorps|facilitation de l'infection par des anticorps]]'''</span>) === antigen === {{Wikipedia|en:Antigen|Antigen}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:antigen|antigen]] :([[#immunology|immunology]]) A substance that induces an [[#immune|immune]] response, usually foreign.</span> *:[[w:抗原|抗原]]    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#antigène|antigène]]'''</span>) === assay === *'''試験法''' <ref>[https://lsd-project.jp/weblsd/o/begin/assay ライフサイエンス辞書 assay] などを参照。</ref> :用例 the currently used [[#RT-PCR assay]]s 現在用いられているRT-PCR試験法 === asymptomatic === ==== asymptomatic patient ==== === bacterium === === basic reproduction number === {{Wikipedia|en:Basic reproduction number|Basic reproduction number}} *[[w:基本再生産数|基本再生産数]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#nombre de reproduction de base|nombre de reproduction de base]]'''</span>, <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#taux de reproduction de base|taux de reproduction de base]]'''</span>) === booster === ==== booster dose ==== {{Wikipedia|en:Booster dose|Booster dose}} <span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:booster dose|booster dose]]</span>:免疫追加の接種(注射) ==== booster shot ==== <span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:booster shot|booster shot]]</span>:免疫追加の予防接種(注射) ==== booster injection ==== <span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:booster injection|booster injection]]</span>:免疫追加の注射 === breakthrough infection === {{Wikipedia|en:Breakthrough infection|Breakthrough infection}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:breakthrough|breakthrough]] [[wikt:en:infection#English|infection]]  /ˈbɹeɪkθɹuː ɪnˈfɛkʃən/ :</span>  *:ブレイクスルー感染('''[[w:打ち抜き感染|打ち抜き感染]]''') *:   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#infection de percée|infection de percée]]'''</span>) === case === *(感染・病気の)症例    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#cas|cas]]'''</span>) **例文1  <span style="font-family:Times New Roman;font-size:13pt;">How is a COVID-19 <span style="color:red;">case</span> defined?</span> <ref name="OurWorldinData_covid-cases">[https://ourworldindata.org/covid-cases Coronavirus (COVID-19) Cases - Statistics and Research - Our World in Data] などを参照。</ref> **:<span style="font-family:Times New Roman;font-size:13pt;">COVID-19の<span style="color:red;">症例</span>は、どのように定義されていますか?</span> **例文2  <span style="font-family:Times New Roman;font-size:13pt;"><span style="color:red;">Cases</span> of COVID-19 – as with other diseases – are broadly defined under a three-tier system: [[#suspected case|#'''suspected''']], [[#probable case|#'''probable''']] and [[#confirmed case|#'''confirmed cases''']].</span> <ref name="OurWorldinData_covid-cases"/> **:<span style="font-family:Times New Roman;font-size:13pt;">COVID-19の<span style="color:red;">症例</span>は、他の病気と同様に、①疑わしい症例、②可能性が高い症例、③確認された症例(確定症例)、の三層システムのもとで広く定義されています。</span> <span style="font-family:Times New Roman;font-size:13pt;"><span style="color:red;"></span></span> ==== active case ==== :現在の症例 ==== closed case ==== ==== confirmed case ==== :(感染・病気が)確認された症例、確定症例 ==== confirmed cases ==== :確定症例(数) ==== critical cases ==== ==== cumulative cases ==== ==== daily confirmed cases ==== ==== mild case ==== ==== number of confirmed cases ==== :確定症例数 ==== probable case ==== :(感染・病気の)可能性が高い症例 ==== severe cases ==== ==== suspected case ==== :(感染・病気の)疑わしい症例 === case fatality rate (CFR) === {{Wikipedia|en:Case fatality rate|Case fatality rate}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:case fatality rate|case fatality rate]]</span> : 致死率、病死率、致命率 (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#taux de létalité|taux de létalité]]'''</span>) === CFR === *<span style="font-family:Times New Roman;font-size:13pt;">see [[#Case fatality rate]] </span> === collapse === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:collapse#English|collapse]]   /kəˈlæps/</span> : *:崩壊   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#effondrement|effondrement]]'''</span>) ==== collapse of the health system ==== :医療体制の崩壊 (医療崩壊)   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#effondrement du système de santé|effondrement du système de santé]]'''</span>) === communicable disease === === contact === :接触 :[[#reduce one's contact with the others]] === coronavirus (CoV) === [[画像:TEM of coronavirus OC43.jpg|thumb|right|250px|[[w:en:Human coronavirus OC43|Human coronavirus OC43 (HCoV-OC43)]]<br>[[w:ヒトコロナウイルスOC43|ヒトコロナウイルスOC43]] ]] {{Wikipedia|en:Coronavirus|Coronavirus}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:coronavirus#English|coronavirus]], &nbsp; [[wikt:en:Coronavirus#English|Coronavirus]]  :  /kəˈɹoʊnəˌvaɪɹəs/, /kəˈɹəʊnəˌvaɪɹəs/ :[[File:En-us-coronavirus.oga]] a group of [[#RNA virus]]es that constitute the subfamily Orthocoronavirinae, in the family Coronaviridae, order Nidovirales.</span> *:'''[[wikt:en:コロナウイルス|コロナウイルス]]'''   :  [[w:ニドウイルス目|ニドウイルス目]] [[w:コロナウイルス科|コロナウイルス科]]の[[w:オルトコロナウイルス亜科|オルトコロナウイルス亜科]]を構成する[[w:RNAウイルス|RNAウイルス]]のグループ   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#coronavirus (CoV)|coronavirus]]'''</span>) === Coronavirus disease 2019 === {{Wikipedia|en:Coronavirus disease 2019|Coronavirus disease 2019}} === COVID-19 === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:COVID-19|COVID-19]] :   /ˈkoʊ.vɪd naɪn.ˈtin/  :[[file:LL-Q1860 (eng)-Vealhurl-COVID-19.wav]]  A disease caused by a coronavirus discovered in 2019, in a zoonotic pandemic starting in Wuhan, Hubei, China.</span> *:[[wikt:en:新型コロナウイルス感染症|新型コロナウイルス感染症]]  ※「コウヴィッド ナインティーン」と読む。 :  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#coronavirus (CoV)|coronavirus]]'''</span>) :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#Coronavirus disease 2019]]</span></span> ==== COVID-19 testing ==== {{Wikipedia|en:COVID-19 testing|COVID-19 testing}} :  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#test diagnostique du SARS-CoV-2|test diagnostique du SARS-CoV-2]]'''</span>) === critical === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#mild]], [[#moderate]], [[#severe]], [[#serious]], [[#extreme]]</span></span> === cumulative === === cytokine === {{Wikipedia|en:Cytokine|Cytokine}} :[[w:サイトカイン|サイトカイン]]<ref>[https://bifidus-fund.jp/keyword/kw048.shtml サイトカイン(cytokine)|用語集|腸内細菌学会]((公法) 腸内細菌学会)などを参照。</ref>   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#cytokine|cytokine]]'''</span>) ==== cytokine storm ==== {{Wikipedia|en:Cytokine storm|Cytokine storm}}    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#choc cytokinique|choc cytokinique]]'''</span>) === death rate === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:death rate|death rate]] : The number of deaths per given unit of population over a given period of time.</span> *:死亡率 (致死率とは異なる) ⇒ <span style="font-family:Times New Roman;font-size:13pt;">see [[#Mortality rate]]</span> === depression === === diagnosis === {{Wikipedia|en:Medical diagnosis|Medical diagnosis}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:diagnosis#English|diagnosis]] :   /daɪəɡˈnəʊsɪs/  : The identification of the nature and cause of an [[#illness|illness]].</span> *:診断   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#diagnostic|diagnostic]]'''</span>) === disinfectant === :消毒剤 === droplet === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:droplet#English|droplet]] :   米 /ˈdɹɑːplət/, 英 /ˈdɹɒplət/  </span> *:水[[wikt:fr:滴|滴]](しずく)、[[wikt:en:飛沫|飛沫]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#gouttelette|gouttelette]]'''</span>) **[[#respiratory droplet]] === emergency === :[[#medical emergency]] (救急医療) === envelope === :<span style="font-family:Times New Roman;font-size:13pt;">''see'' [[#viral envelope]]</span> === epidemic === {{Wikipedia|en:Epidemic|Epidemic}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:epidemic#English|epidemic]] :  /ˌɛpɪˈdɛmɪk/ :  *# A widespread disease that affects many individuals in a population. *# ([[#epidemiology]]) An occurrence of a disease or disorder in a population at a frequency higher than that expected in a given time period.</span> *:〔名詞〕 病気の流行  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#épidémie|épidémie]]'''</span>) === epidemiologic === *'''疫学的な''' <ref>[https://lsd-project.jp/weblsd/o/begin/epidemiologic ライフサイエンス辞書 epidemiologic] などを参照。</ref> ==== epidemiologic evidence ==== *'''疫学的証拠''' <ref>[https://lsd-project.jp/weblsd/o/begin/epidemiologic%20evidence ライフサイエンス辞書 epidemiologic evidence] などを参照。</ref> === epidemiology === === excess death === === excess mortality === {{Wikipedia|en:Mortality displacement|Mortality displacement}}  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#surmortalité|surmortalité]]'''</span>) === explosion === *<span style="font-family:Times New Roman;font-size:13pt;">an explosion in [[#COVID-19]] cases</span> *:COVID-19症例の爆発的増加 *<span style="font-family:Times New Roman;font-size:13pt;">an explosion of new cases</span> *:新規感染者の爆発的増加 === explosive === === extreme === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#mild]], [[#moderate]], [[#severe]], [[#serious]], [[#critical]]</span></span> === face shield === {{Wikipedia|en:Face shield|Face shield}} :[[w:フェイスシールド|フェイスシールド]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#écran facial|écran facial]]'''</span>) === false negative === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:false negative#English|false negative]] : /ˈfɔls ˈnɛɡətɪv/, /ˈfɑls ˈnɛɡətɪv/, /-ɾɪv/ ; /ˈfɔːls ˈnɛɡətɪv/, /ˈfɒls ˈnɛɡətɪv/  :  </span> *:'''偽陰性'''の : 本来は陽性であるはずの検査で、誤って陰性と判定されてしまうこと。<ref>[https://kotobank.jp/word/%E5%81%BD%E9%99%B0%E6%80%A7-1829714 偽陰性(ギインセイ)とは - コトバンク]、[https://dictionary.goo.ne.jp/word/%E5%81%BD%E9%99%B0%E6%80%A7/#jn-292558 偽陰性(ぎいんせい)の意味 - goo国語辞書] などを参照。</ref><ref group="注釈" name="偽陰性と偽陽性">医学的な検査には感度([[#sensitivity]])と特異度([[#specificity]])があり、例えば新型コロナウイルスを検出するPCR検査の感度は70%程度であるとされている。つまり、3割の検査では、感染しているのに「陰性」と判定される偽陰性、あるいは逆に、感染していないのに「陽性」と判定される偽陽性がありうるということである。⇒①[https://jeaweb.jp/covid/qa/index.html Q1:新型コロナウイルス検査は、どのくらい正確なのですか?;Q2:PCR検査とはどんなものですか?] ([[w:日本疫学会|日本疫学会]]) あるいは ②[https://kanagawa-med.or.jp/corona_news/pcr%E6%A4%9C%E6%9F%BB%E3%81%AE%E7%89%B9%E6%80%A7%E3%81%A8%E9%99%90%E7%95%8C/ PCR検査の特性と限界 (神奈川県医師会)] などを参照。</ref>   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#faux négatif|faux négatif]]'''</span>) ==== false negativity ==== *'''偽陰性''' **例文 :  <span style="font-family:Times New Roman;font-size:13pt;">Therefore, combining this [[#epidemiologic evidence|epidemiologic evidence]] with the analytical [[#sensitivity|sensitivity]] of the currently used [[#RT-PCR assay|RT-PCR assay]]s, it is not surprising that at least two gray zones could be identified, potentially plagued by <span style="color:red;">false</span> [[#SARS-CoV-2|SARS-CoV-2]] <span style="color:red;">negativity</span> attributable to the low [[#viral load|viral load]]s especially in [[#asymptomatic patient|asymptomatic]] or [[#mildly symptomatic patient|mildly symptomatic patient]]s. </span><ref name="degruyter2020-03-16">[https://www.degruyter.com/view/journals/cclm/ahead-of-print/article-10.1515-cclm-2020-0285/article-10.1515-cclm-2020-0285.xml Potential preanalytical and analytical vulnerabilities in the laboratory diagnosis of coronavirus disease 2019 (COVID-19)]([[w:en:Walter de Gruyter|De Gruyter GmbH]][[w:有限会社 (ドイツ)|有限会社]]刊行の論文)などを参照。 </ref> **:それゆえ、この疫学的証拠と現在用いられている RT-PCR 試験法の分析感度を組み合わせると、低いウイルス量(※血中のウイルス濃度)に起因する新型コロナウイルス (SARS-CoV-2) の <span style="color:red;">偽陰性</span> に悩まされている少なくとも<u>2つのグレーゾーン</u>、とりわけ無症候性患者あるいは軽症の患者を識別することができることは、当然のことである。<ref group="注釈" name="degruyter2020-03-16fig1">'''図1''' ([https://www.degruyter.com/view/journals/cclm/ahead-of-print/article-10.1515-cclm-2020-0285/article-10.1515-cclm-2020-0285.xml#j_cclm-2020-0285_fig_001 Figure1]) で、'''横軸''' は症状の発症からの日数(Days from [[#symptom onset|symptom onset]])、'''縦軸''' は鼻やのどにおけるウイルス量([[#Viral load|Viral load]] in nose and throat)。 '''感染''' (Infection)から数日を経て、'''症状の発症''' ([[#symptom onset|Symptom onset]])が起こり、ウイルスの増殖によってウイルス量(=血中のウイルス濃度)が急増するが、発症から7~8日後頃にピークに達し、その後は抗体の働きとともにウイルス量は減少する。発症から約2週間で '''症状の緩和''' ([[#symptom relief|Symptom relief]]) となり、ウイルス量はごくわずかに減少してゆく。このように、感染の初期と末期では、ウイルス濃度が低すぎるために'''偽陰性'''と判定される<u>2つのグレーゾーン</u>が存在するのである。</ref> === false positive === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:false positive#English|false positive]] : [[wikt:fr:false positive|\fɔls pɒz.ɪ.tɪv\]]  :  </span> *:'''偽陽性'''の : 本来は陰性であるはずの検査で、誤って陽性と判定されてしまうこと。<ref>[https://kotobank.jp/word/%E5%81%BD%E9%99%BD%E6%80%A7-674743 偽陽性(ギヨウセイ)とは - コトバンク]、[https://dictionary.goo.ne.jp/word/%E5%81%BD%E9%99%BD%E6%80%A7/#jn-253702 偽陽性(ぎようせい)の意味 - goo国語辞書] などを参照。</ref><ref group="注釈" name="偽陰性と偽陽性"/>    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#faux positif|faux positif]]'''</span>) **例文 : <span style="font-family:Times New Roman;font-size:13pt;">Dead virus fragments are causing COVID-19 [[#reinfection|reinfection]] <span style="color:red;">false positive</span>s</span> <ref name="MedicalNews20200504">[https://www.news-medical.net/news/20200504/Dead-virus-fragments-are-causing-COVID-19-reinfection-false-positives.aspx Dead virus fragments are causing COVID-19 reinfection false positives] [https://www.news-medical.net/ Medical News]2020年5月4日記事などを参照。</ref> **:死んだウイルスの断片が、COVID-19の再感染という<span style="color:red;">偽陽性</span>を引き起こしている。<ref name="東洋経済20200510">[https://toyokeizai.net/articles/-/349446 コロナ再感染は「偽陽性の公算」韓国で進む研究 ロイター 東洋経済オンライン]東洋経済オンライン2020年5月10日記事 などを参照。</ref> === false rumor === :<span style="font-family:Times New Roman;font-size:13pt;">''see also'' [[#misinformation]] === fatality rate === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:fatality rate|fatality rate]] : The number of people that die per a number of cases</span> *: **<span style="font-family:Times New Roman;font-size:13pt;">see [[#Case fatality rate]] </span> === gargle, gargling === {{Wikipedia|en:Gargling|Gargling}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:gargle#English|gargle]] :  /ˈɡɑɹɡəl/ </span> :〔動詞〕うがいをする *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:gargling|gargling]]</span> :〔名詞〕うがい(をすること) ;例文1 *<span style="font-family:Times New Roman;font-size:13pt;">Myth: Drinking hot water, or '''gargling''', can prevent [[#coronavirus (CoV)|coronavirus]] [[#infection|infection]]</span> <ref name="covid19factscom83990">ttps://www.covid-19facts.com/?p=83990 (myth Drinking hot water, or gargling, can prevent coronavirus infection – COVID-19 FACTS)より、一部を抜粋して引用。</ref> *:お湯を飲むこと、あるいは'''うがい'''がコロナウイルス感染を予防できるという神話 *<span style="font-family:Times New Roman;font-size:13pt;">There have been posts on social media of people advising each other to drink hot water or '''gargle''', to “wash away” coronavirus and prevent infection.</span><ref name="covid19factscom83990"/> *:ソーシャルメディア上では、コロナウイルスを「洗い流して」感染を予防するためにお湯を飲むこと、または、'''うがいをする'''ことを勧める人々の投稿があります。 *<span style="font-family:Times New Roman;font-size:13pt;">Once the virus is in your body, drinking water or '''gargling''' is unlikely to help.</span><ref name="covid19factscom83990"/> *:ウイルスが一度あなたの体内に入ってしまうと、水を飲むことまたは、'''うがいをすること'''が助けになることはありそうもありません。 *<span style="font-family:Times New Roman;font-size:13pt;">In some countries in East Asia, '''gargling''' is a common practice and widely believed to reduce infection. </span><ref name="covid19factscom83990"/> *:東アジアの一部の国では、'''うがい'''は普通の習慣であり、感染を減らすと広く信じられています。 *<span style="font-family:Times New Roman;font-size:13pt;">It was even part of the recommended pandemic influenza response by the Japanese government.</span><ref name="covid19factscom83990"/> *:それは、日本政府によって推奨されるインフルエンザ大流行への対応の一部でさえありました。 ;例文2 *<span style="font-family:Times New Roman;font-size:13pt;">Myth 2: Regularly '''gargling''' with saltwater or [[w:enSaline (medicine):|saline]] can help prevent infection with the new coronavirus, as well as drinking water to “flush” the virus from your mouth.</span><ref name="harvard-edu-myths">[https://www.hsph.harvard.edu/india-center/myths-vs-facts/ Myths vs Facts – India Research Center] [[w:en:Harvard T.H. Chan School of Public Health|Harvard T.H. Chan School of Public Health]](ハーバード大学T.H.チャン公衆衛生大学院、2020年6月6日閲覧) を参照。</ref> *:'''神話''' 2:定期的に塩水や[[w:生理食塩水|生理食塩水]]で'''うがいすること'''は、新たなコロナウイルスの感染予防を助けることができます。あなたの口からウイルスを「洗い流す」ために水を飲むのと同様に。 *<span style="font-family:Times New Roman;font-size:13pt;">False. There is no [[#evidence|evidence]] that regularly '''gargling''' has protected people from infection with the new coronavirus. </span><ref name="harvard-edu-myths"/> *:'''虚偽です'''。定期的に'''うがいをすること'''が新たなコロナウイルスの感染から人々を防護したというエビデンス(証拠)はありません。 *<span style="font-family:Times New Roman;font-size:13pt;">While this may help soothe a [[#sore throat|sore throat]], </span><ref name="harvard-edu-myths"/> *:これがのどの痛みをやわらげるのに役立つとしても、 *<span style="font-family:Times New Roman;font-size:13pt;">this practice will not prevent the virus from entering your [[#lung|lung]]s</span><ref name="harvard-edu-myths"/> *:この習慣は、ウイルスがあなたの肺に入るのを予防することはないでしょう。 *<span style="font-family:Times New Roman;font-size:13pt;">—neither will drinking frequent sips of water.</span><ref name="harvard-edu-myths"/> *:水を頻繁に一口ずつ飲むことも(ウイルス感染を予防することはないでしょう)。 {{コラム|「うがい がウイルスを洗い流す」という日本の神話?| 新型コロナウイルス感染症の流行で、日本では感染予防策として「手洗い」などとともに'''「うがい」'''が奨励されている。国・厚生労働省<ref>[https://www.mhlw.go.jp/stf/seisakunitsuite/newpage_00009.html 新型コロナウイルス感染症(新型コロナウイルス感染症対策専門家会議 脇田座長ご説明)|厚生労働省] より「小まめにうがい・手洗いをする」(2020年6月6日閲覧)</ref>・自治体<ref>[https://www.pref.miyagi.jp/soshiki/suido-kanri/coronavirus19.html 新型コロナウイルス等の予防について - 宮城県公式ウェブサイト](2020年6月6日閲覧)などを参照。</ref>・医療機関<ref>医療機関では、例えば [https://www.saitama.jrc.or.jp/news/%E3%80%90%E6%AD%A3%E3%81%97%E3%81%84%E6%89%8B%E6%B4%97%E3%81%84%E3%80%81%E3%81%86%E3%81%8C%E3%81%84%E3%80%81%E5%92%B3%E3%82%A8%E3%83%81%E3%82%B1%E3%83%83%E3%83%88%E3%81%AE%E3%81%94%E7%B4%B9%E4%BB%8B/ 【正しい手洗い、うがい、咳エチケットのご紹介】 | 日本赤十字社 埼玉県支部 さいたまの赤十字](2020年5月12日掲載)あるいは、病院・診療所のサイトなどを参照。</ref> など日本国内のさまざまな行政および医療業界やそれらのサイトから発信されている。 <br> しかしながら、うがいの感染予防効果については、欧米の研究者・研究機関は、確かな医学的研究やエビデンス(医学的根拠)に欠ける俗説とする場合が多い。うがい薬(マウスウォッシュ)については、効果があるかどうか調べた研究もあるようだが、確立された根拠はないようである。他方で、日本国内では、名だたる医学者や学会・医師会・医療機関などが大真面目にうがいを推奨している現状がある。 <br> うがいに限らず、日本独特の伝統的・慣習的な感染予防策には、俗説・民間信仰の類いのようなものが少なからず見受けられるようである。 }} === gene === {{Wikipedia|en:Gene|Gene}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:gene#English|gene]] :  /dʒiːn/ : </span> [[w:遺伝子|遺伝子]] :(⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#gène|gène]]'''</span>) === genome === {{Wikipedia|en:Genome|Genome}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:genome#English|genome]] :  /ˈdʒiː.noʊm/, /dʒɨˈnoʊm/, /ˈdʒiː.nəʊm/ : </span> [[w:ゲノム|ゲノム]] :(⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#génome|génome]]'''</span>) === genotype === {{Wikipedia|en:Genotype|Genotype}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:genotype#English|genotype]] : /ˈdʒiːn.oʊ.taɪp/, /ˈdʒɛn.əʊ.taɪp/ : </span> *:[[wikt:en:遺伝子型|遺伝子型]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#génotype|génotype]]'''</span>) === germ === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:germ#English|germ]] : /d͡ʒɜːm/, /d͡ʒɝm/ : A [[wikt:en:pathogenic#English|pathogenic]] [[wikt:en:microorganism#English|microorganism]]</span> *:病原性微生物、病原菌、細菌 === hand sanitizer === {{Wikipedia|en:Hand sanitizer|Hand sanitizer}} [[w:手指消毒剤|手指消毒剤]] === HIV === === hospitalisation === *[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:hospitalisation#English|hospitalisation]] </span> *:[[wikt:en:入院#Japanese|入院]]  ⇒[[画像:Flag of the United States.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">[[#hospitalization]]</span> :(⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#hospitalisation|hospitalisation]]'''</span>) === hospitalization === *[[画像:Flag of the United States.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:hospitalization#English|hospitalization]] </span> *:[[wikt:en:入院#Japanese|入院]]  ⇒[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">[[#hospitalisation]]</span> === hygiene === {{Wikipedia|en:Hygiene|Hygiene}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:hygiene#English|hygiene]] :  /ˈhaɪˌdʒiːn/ :  *:衛生   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#hygiène|hygiène]]'''</span>) === Ig === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:Ig#English|Ig]] : (medicine) Abbreviation of [[#immunoglobulin]].</span> : [[#immunoglobulin]] の略語。 === illness === === immune system === {{Wikipedia|en:Immune system|Immune system}} :[[w:免疫系|免疫系]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#système immunitaire|système immunitaire]]'''</span>) ==== adaptive immune system ==== :獲得免疫系  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#système immunitaire adaptatif|système immunitaire adaptatif]]'''</span>) ==== innate immune system ==== :自然免疫系  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#système immunitaire inné|système immunitaire inné]]'''</span>) === immunisation === <span style="font-family:Times New Roman;font-size:13pt;">''(British) Alternative spelling of'' [[#immunization]]</span> === immunity === {{Wikipedia|en:Immunity (medical)|Immunity (medical)}} :[[w:免疫 (医学)|免疫]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#immunité|immunité]]'''</span>) ==== herd immunity ==== {{Wikipedia|en:Herd immunity|Herd immunity}} :[[w:集団免疫|集団免疫]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#immunité grégaire|immunité grégaire]]'''</span>) ==== passive immunity ==== :[[w:受動免疫|受動免疫]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#immunité passive|immunité passive]]'''</span>) <!-- :  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語# | ]]'''</span>) --> === immunization === {{Wikipedia|en:Immunization|Immunization}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:immunization|immunization]] :</span> *:[[w:免疫化|免疫化(免疫付与)]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#immunisation|immunisation]]'''</span>) === immunoglobulin === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:immunoglobulin#English|immunoglobulin]] :</span> *:'''免疫グロブリン''' (抗体 ([[#antibody]]) としての構造・機能をもつ一群の血清たんぱく質<ref>[https://kotobank.jp/word/%E5%85%8D%E7%96%AB%E3%82%B0%E3%83%AD%E3%83%96%E3%83%AA%E3%83%B3-165991 免疫グロブリン(めんえきグロブリン)とは - コトバンク] などを参照。</ref>)  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#immunoglobuline|immunoglobuline]]'''</span>) === immunology === === infection === {{Wikipedia|en:Infection|Infection}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:infection#English|infection]] : /ɪnˈfɛkʃən/ :  *# an infective agent or material contaminated with an infective agent<ref>[[#Merriam-Webster's Medical Dictionary (2016)]] の “infection” の項より一部引用。</ref> *# The process by which a disease is transmitted via micro-organisms from one person to another.<ref>[[#Black's Student Medical Dictionary (2011)]] の “infection” より一部引用。</ref></span> === infectious === === infectious disease === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:infectious disease#English|infectious disease]] : </span> === inoculation === {{Wikipedia|en:Inoculation|Inoculation}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:inoculation#English|inoculation]]   /ɪˌnɑkjəˈleɪʃən/, /ɪˌnɒkjʊˈleɪʃən/ :</span> *:[[w:接種|接種]]  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#inoculation|inoculation]]'''</span>) === lockdown === {{Wikipedia|en:Lockdown|Lockdown}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:lockdown#English|lockdown]] : /ˈlɑkˌdaʊn/, /ˈlɒkˌdaʊn/ : The [[wikt:en:confinement#English|confinement]] of people in their own rooms (e.g. in a school) or cells (in a prison), or to their own homes or areas (e.g. in the case of a city- or nation-wide issue) as a security measure after or amid a [[wikt:en:disturbance#English|disturbance]] or [[#pandemic|pandemic]], etc. *:[[w:ロックダウン (封鎖)|ロックダウン]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#confinement|confinement]]'''</span>) === medical === ==== medical emergency ==== {{Wikipedia|en:Medical emergency|Medical emergency}} :[[w:救急医療|救急医療]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#urgences|urgences]]'''</span>) === mild === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :'''軽症の''' <ref>[https://lsd-project.jp/weblsd/c/begin/mild ライフサイエンス辞書 mild] などを参照。</ref> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#moderate]], [[#severe]], [[#serious]], [[#extreme]], [[#critical]]</span></span> ==== mild case ==== :'''軽症例''' <ref>[https://lsd-project.jp/weblsd/c/begin/mild%20case ライフサイエンス辞書 mild case] などを参照。</ref> ==== mild symptom ==== :'''軽症''' <ref>[https://lsd-project.jp/weblsd/c/begin/mild%20symptom ライフサイエンス辞書 mild symptom] などを参照。</ref> === mildly === ==== mildly symptomatic patient ==== === misinformation === {{Wikipedia|en:COVID-19 misinformation|COVID-19 misinformation}} *:[[w:誤報|誤情報]] :<span style="font-family:Times New Roman;font-size:13pt;">''see also'' [[#false rumor]] === moderate === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :'''中等症の''' <ref>[https://lsd-project.jp/weblsd/c/begin/moderate ライフサイエンス辞書 moderate] などを参照。</ref> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#mild]], [[#severe]], [[#serious]], [[#extreme]], [[#critical]]</span></span> === mortality rate === {{Wikipedia|en:Mortality rate|Mortality rate}} *<span style="font-family:Times New Roman;font-size:13pt;">mortality rate</span> : [[w:死亡率|死亡率]] (致死率とは異なる) (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#taux de mortalité|taux de mortalité]]'''</span>) === N95 mask === {{Wikipedia|en:N95 mask|N95 mask}} :[[#respirator]] === pandemic === {{Wikipedia|en:Pandemic|Pandemic}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:pandemic#English|pandemic]] :  /pænˈdɛmɪk/ : </span> '''パンデミック(病気の世界的な大流行)''' <div style="background-color:#efe;"> *<span style="font-family:Times New Roman;font-size:13pt;">an [[#epidemic|epidemic]] that has [[#spread|spread]] so widely that very many people in different countries are affected.<br> Examples include the Black Death ─ the epidemic [[#Plague|PLAGUE]], caused by the [[#bacterium|bacterium]] ''Yersinia pestis'', that devastated European populations in the Middle Ages, killing more than a third of the people ; and the [[#Influenza|Influenza]] pandemic of 1919-20 that killed more people than did the First World War.&nbsp; [[#AIDS|AIDS]]/[[#HIV|HIV]] is currently pandemic. <ref name="BSMD-pandemic">[[#Black's Student Medical Dictionary (2011)]] の “Pandemic” より引用。</ref></span><br> *:非常に広範囲に蔓延したエピデミック(伝染病の流行)で、さまざまな国々の人々が影響を受けるもの。<br>例としては、「黒死病」─<span style="font-family:Times New Roman;font-size:13pt;">''Yersinia pestis''</span> という細菌によって引き起こされ、中世ヨーロッパの人口を破壊して3分の1の人々を死に至らしめた'''ペスト'''の伝染病流行がある。; そして、1919年~1920年の'''インフルエンザ・パンデミック'''は、第一次世界大戦より多くの人々を死に至らしめた。'''エイズ'''は現在のパンデミックである。 </div> *A pandemic disease; a disease that affects a wide geographical area and a large proportion of the population.</span> *:広域的 (全国的・世界的) 流行病 (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#pandémie|pandémie]]'''</span>) === pathogen === {{Wikipedia|en:Pathogen|Pathogen}} :[[w:病原体|病原体]] (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#agent infectieux|agent infectieux]]'''</span>) ==== pathogenic ==== === patient === *[[#asymptomatic patient]](s) *[[#symptomatic patient]](s) :[[#mildly symptomatic patient]](s) === PCR === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:PCR#English|PCR]] : </span> : [[#polymerase chain reaction]] の略語。<ref>[https://lsd-project.jp/weblsd/o/begin/PCR ライフサイエンス辞書 PCR] などを参照。</ref> ==== PCR assay ==== :'''PCR法''' <ref>[https://lsd-project.jp/weblsd/o/begin/PCR%20assay ライフサイエンス辞書 PCR assay] などを参照。</ref> === personal protective equipment === {{Wikipedia|en:Personal protective equipment|Personal protective equipment}} :個人防護具   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#équipement de protection individuelle |équipement de protection individuelle]]'''</span>) === phase === {{Wikipedia|en:Phase|Phase}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:phase#English|phase]] :  /feɪz/ :  *:段階、局面、フェーズ   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#phase|phase]]'''</span>) === physical distancing === *<span style="font-family:Times New Roman;font-size:13pt;">Physical distancing: How to slow the spread of COVID-19 </span><ref>[https://www.canada.ca/en/public-health/services/publications/diseases-conditions/social-distancing.html Physical distancing How to slow the spread of COVID-19 - Canada.ca] を参照。</ref> *:フィジカル・ディスタンシング(身体的距離をとること):どのようにCOVID-19の広がりを遅らせるか。 === Plague === :ペスト === polymerase chain reaction === {{Wikipedia|en:Polymerase chain reaction|Polymerase chain reaction}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:polymerase chain reaction|polymerase chain reaction]] : (molecular biology) A technique in molecular biology for creating multiple copies of DNA from a sample; used in genetic fingerprinting etc.</span> *:[[w:ポリメラーゼ連鎖反応|ポリメラーゼ連鎖反応]](法)、'''PCR法''' <ref>[https://lsd-project.jp/weblsd/o/begin/polymerase%20chain%20reaction ライフサイエンス辞書 polymerase chain reaction] などを参照。</ref> *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#amplification en chaîne par polymérase|amplification en chaîne par polymérase]]'''</span> または <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#réaction en chaîne par polymérase|réaction en chaîne par polymérase]]'''</span>) **[[#RT-PCR]], [[#reverse transcription polymerase chain reaction]] === PPE === :<span style="font-family:Times New Roman;font-size:13pt;">''see'' [[#personal protective equipment]]</span> === quarantine === [[画像:ICS Lima.svg|thumb|right|150px|Signal flag means the ship is under '''[[w:en:Quarantine|quarantine]]''']] *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:quarantine#English|quarantine]] : /ˈkwɔɹ.ən.tin/, /ˈkɔɹ.ən.tin/ ; /ˈkwɒɹ.ən.tiːn/, /ˈkwɒɹ.ən.taɪn/ : A sanitary measure to prevent the spread of a contagious plague by isolating those believed or feared to be infected.</span> *:[[wikt:en:検疫|検疫]]・防疫、隔離 (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#quarantaine|quarantaine]]''', '''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#confinement|confinement]]'''</span>) === reduce === :減らす ==== reduce infection ==== :感染を抑える ==== reduce infectious morbidity ==== :感染死亡率が低下する ==== reduce mortality ==== :死亡率を低下させる ==== reduce one's contact with the others ==== *<span style="font-family:Times New Roman;font-size:13pt;">reduce one's contact with the others (by ~ %)</span> *:他人との接触を(~%)減らす **例文 <span style="font-family:Times New Roman;font-size:13pt;">Abe asked people to <span style="color:red;">reduce their contact with others by 70-80%</span>, saying successful social distancing could see infections peak in two weeks. </span> <ref>[https://www.theguardian.com/world/2020/apr/07/japan-shinzo-abe-declares-state-of-emergency-over-coronavirus Japan declares state of emergency over coronavirus World news The Guardian] [[w:ガーディアン|英ガーディアン紙]]([[w:en:The Guardian|The Guardian]]) 2020年4月7日記事などを参照。</ref> **:安倍(首相)は、<span style="color:red;">他人との接触を7~8割減らす</span>ことを(日本の)人々に求め、ソーシャル・ディスタンスが成功すれば2週間以内に感染のピークを見ることができる (=感染者数をピークアウトさせることができる) と述べた。 === reinfection === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:reinfection#English|reinfection]] : 再感染    (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#réinfection|réinfection]]'''</span>) **例文 : <span style="font-family:Times New Roman;font-size:13pt;">Dead virus fragments are causing COVID-19 <span style="color:red;">reinfection</span> [[#false positive|false positive]]s</span> <ref name="MedicalNews20200504"/> **:死んだウイルスの断片が、COVID-19の<span style="color:red;">再感染</span>という偽陽性を引き起こしている。<ref name="東洋経済20200510"/> === respirator === {{Wikipedia|en:Respirator|Respirator}} :[[#N95 mask]] === respiratory droplet === {{Wikipedia|en:Respiratory droplet|Respiratory droplet}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:droplet#English|droplet]] [[wikt:en:respiratory#English|respiratory]] :   米 /ˈɹɛspəɹəˌtɔɹi dɹɑːplət/, /ɹɪˈspaɪɹəˌtɔɹi dɹɑːplət/, 英 /ɹɪˈspɪɹət(ə)ɹi ˈdɹɒplət/  </span> *:呼吸[[wikt:en:飛沫|飛沫]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#gouttelette respiratoire|gouttelette respiratoire]]'''</span>) === response === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:response#English|response]] :   /ɹɪˈspɒns/ </span> *:対応、対処   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#riposte|riposte]]'''</span>) === reverse transcription polymerase chain reaction === {{Wikipedia|en:Reverse transcription polymerase chain reaction|Reverse transcription polymerase chain reaction}} :[[w:逆転写ポリメラーゼ連鎖反応|逆転写ポリメラーゼ連鎖反応]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#RT-PCR|RT-PCR]]'''</span>) === RT-PCR === : <span style="font-family:Times New Roman;font-size:13pt;">''see'' [[#reverse transcription polymerase chain reaction]]</span> :[[w:逆転写ポリメラーゼ連鎖反応|逆転写ポリメラーゼ連鎖反応]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#RT-PCR|RT-PCR]]'''</span>) ==== RT-PCR assay ==== *[[#RT-PCR|RT-PCR]] [[#assay|assay]] *:'''RT-PCR試験法''' **例文1 :  <span style="font-family:Times New Roman;font-size:13pt;">Therefore, combining this [[#epidemiologic evidence|epidemiologic evidence]] with the analytical [[#sensitivity|sensitivity]] of the currently used <span style="color:red;">RT-PCR assay</span>s, it is not surprising that at least two gray zones could be identified, potentially plagued by [[#false negativity|false]] [[#SARS-CoV-2|SARS-CoV-2]] [[#false negativity|negativity]] attributable to the low [[#viral load|viral load]]s especially in [[#asymptomatic patient|asymptomatic]] or [[#mildly symptomatic patient|mildly symptomatic patient]]s. </span><ref name="degruyter2020-03-16"/> **:それゆえ、この疫学的証拠と現在用いられている <span style="color:red;">RT-PCR 試験法</span> の分析感度を組み合わせると、低いウイルス量 <small>(訳注: 血中のウイルス濃度)</small> に起因する新型コロナウイルス (SARS-CoV-2) の 偽陰性に悩まされている少なくとも<u>2つのグレーゾーン</u>、とりわけ無症候性患者あるいは軽症の患者を識別することができることは、当然のことである。<ref group="注釈" name="degruyter2020-03-16fig1"/> **例文2 :  <span style="font-family:Times New Roman;font-size:13pt;">The former would correspond to the initial phase of [[#infection|infection]], when the patient is still completely [[#asymptomatic patient|asymptomatic]] or only [[#mildly symptomatic patient|mildly symptomatic]]. &nbsp; Virus shedding may have already initiated during this period, thought its extent would probably be too low to be identified by some <span style="color:red;">RT-PCR assay</span>s.</span><ref name="degruyter2020-03-16"/> **:前者 <small>(訳注: 感染初期のグレーゾーン)</small> は、患者がまだ完全に無症状であるか、または軽症である感染の初期段階に対応する。ウイルスの排出は、この時期の間にすでに始まっている可能性があり、その範囲は、いくつかの <span style="color:red;">RT-PCR 試験法</span> により識別されるには、多分あまりにも低いと考えられた。<ref group="注釈" name="degruyter2020-03-16fig1"/> ==== rRT-PCR ==== === sanitizer === :[[#hand sanitizer]] (ハンドサニタイザー、手指消毒剤) :[[#disinfectant]](消毒剤) === SARS === ==== SARS-CoV ==== ==== SARS-CoV-2 ==== *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:SARS-CoV-2#English|SARS-CoV-2]] :  /sɑɹs koʊ viː tu/  </span> *:''see'' &nbsp; <span style="font-family:Times New Roman;">[[#Severe acute respiratory syndrome coronavirus 2]]</span> === serious === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :'''重篤な'''  <ref>[https://lsd-project.jp/weblsd/c/begin/serious ライフサイエンス辞書 serious] などを参照。</ref> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#mild]], [[#moderate]], [[#severe]], [[#extreme]], [[#critical]]</span></span> ==== seriously ==== <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :重篤に  <ref>[https://lsd-project.jp/weblsd/c/begin/seriously ライフサイエンス辞書 seriously] などを参照。</ref> === severe === <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :'''重症の'''、'''重症型の'''  <ref>[https://lsd-project.jp/weblsd/c/begin/severe ライフサイエンス辞書 severe] などを参照。</ref> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#severity]], [[#mild]], [[#moderate]], [[#serious]], [[#extreme]], [[#critical]]</span></span> ==== severe case ==== ==== severe disease ==== *<span style="font-family:Times New Roman;"><span style="font-size:13pt;">severe disease</span></span> *:'''重症''' <ref>[https://lsd-project.jp/weblsd/c/begin/severe%20disease ライフサイエンス辞書 severe disease] などを参照。</ref> === sensitivity === {{Wikipedia|en:Sensitivity and specificity|Sensitivity and specificity}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:sensitivity#English|sensitivity]] :  /sɛnsɪˈtɪvɪti/  </span> *: (検査の) 感度     <ref group="注釈" name="偽陰性と偽陽性"/> (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#sensibilité|sensibilité]]'''</span>) === severity === [[画像:Severity-of-coronavirus-cases-in-China-1.png|thumb|right|250px| The severity of diagnosed [[#COVID-19|COVID-19]] cases in China (Death Rate is based on [[#confirmed case|CONFIRMED CASES]].)<br>中国でCOVID-19と診断された症例の重症度 (死亡率は、確定症例数に基づく)。]] *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:severity#English|severity]] :   /səˈvɛɹɨti/  </span> *:(病気・症状の) '''重症度''' <ref>[https://lsd-project.jp/weblsd/c/begin/severity ライフサイエンス辞書 severity] などを参照。</ref>      (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#sévérité|sévérité]]'''</span>) <span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> :<span style="font-family:Times New Roman;">''See also''  <span style="font-size:13pt;">[[#mild]], [[#moderate]], [[#severe]], [[#serious]], [[#extreme]], [[#critical]]</span></span> === sewage === {{Wikipedia|en:Sewage|Sewage}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:sewage#English|sewage]] :  米 \ˈsu.ɪdʒ\, 英 \ˈsuː.ɪdʒ\   </span> *: [[wikt:en:下水|下水]]   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#eaux usées|eaux usées]]'''</span>) *:類義語: <span style="font-family:Times New Roman;">[[#wastewater]]</span> **例文  <span style="font-family:Times New Roman;font-size:13pt;">Countries Begin Large-Scale Screening for [[#SARS-CoV-2]] in <span style="color:red;">Sewage</span></span> <ref>[https://www.the-scientist.com/news-opinion/countries-begin-large-scale-screening-for-sars-cov-2-in-sewage-67535 Countries Begin Large-Scale Screening for SARS-CoV-2 in Sewage The Scientist Magazine®] ザ・サイエンティスト誌 ([[w:en:The Scientist (magazine)|The Scientist magazine]]) 2020年5月14日記事、などを参照。</ref> *:各国が、<span style="color:red;">下水</span>において、新型コロナウイルス(SARS-CoV-2)の大規模なスクリーニング(医学検査)を開始 === social distancing === :<span style="font-family:Times New Roman;">''see also'' [[#physical distancing]]</span> === sore throat === === specificity === {{Wikipedia|en:Sensitivity and specificity|Sensitivity and specificity}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:specificity#English|specificity]] :  /spɛsɪˈfɪsɪti/ </span> *: (検査の) 特異度   <ref group="注釈" name="偽陰性と偽陽性"/>  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#spécificité|spécificité]]'''</span>) === spread === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:spread#English|spread]] :  /spɹɛd/ </span> *:広がり、広まり、(病気の)蔓延  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#propagation|propagation]]'''</span>) ==== spread ot the virus ==== *<span style="font-family:Times New Roman;font-size:13pt;">(the) spread of the [[#virus]]</span> *:ウイルスの広がり、蔓延  (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#propagation du virus|propagation du virus]]'''</span>) === strain === {{Wikipedia|en:Strain (biology)|Strain (biology)}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:strain#English|strain]] :  /stɹeɪ̯n/ </span> *: (細菌・ウイルスなどの) 変種、株     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#souche|souche]]'''</span>) **[[#viral strain]] (ウイルス株) **例文  <span style="font-family:Times New Roman;font-size:13pt;">[[#coronavirus (CoV)|Coronavirus]] has mutated to become far deadlier in Europe than the milder <span style="color:red;">strain</span> that made its way to the US west coast, Chinese study claims</span> <ref>[https://www.dailymail.co.uk/health/article-8237849/Coronavirus-mutated-Strains-evolved-far-deadlier-spread-Europe-New-York.html coronavirus 30 strains have developed, most deadly in Europe Daily Mail Online] [[w:デイリー・メール|デイリー・メール紙]] 2020年4月21日記事、などを参照。</ref> *:コロナウイルスは、ヨーロッパで突然変異して、米国西海岸に進出したより穏やかな<span style="color:red;">株(変種)</span>よりもはるかに致命的なものになった、と中国の研究は主張。 === superinfect === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:superinfect|superinfect]] : To [[#infect|infect]] as a [[#superinfection|superinfection]].</span> === superinfection === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:superinfection|superinfection]] : An [[#infection|infection]] which follows or occurs during another infection or disease process</span> *:他の感染や病気の過程の間に生じたり、続いて起こる感染 === superspreader === {{Wikipedia|en:Superspreader|Superspreader}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:superspreader#English|superspreader]] : (medicine, [[#epidemiology|epidemiology]]) A [[#patient|patient]] responsible for [[#spread|spreading]] an [[#infection|infection]] to many other people.</span> *:[[w:スーパー・スプレッダー|スーパースプレッダー]]:多くの他の人々に感染を広げている責任のある患者     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#superinfecteur|superinfecteur]]''','''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#super-propagateur|super-propagateur]]'''</span>) === surgical mask === === symptom === {{Wikipedia|en:Symptom|Symptom}} *<span style="font-family:Times New Roman;"><span style="font-size:13pt;">[[wikt:en:symptom|symptom]] :  /ˈsɪmp.təm/, /ˈsɪm(p)təm/</span></span> *:'''症状'''     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#symptôme|symptôme]]'''</span>) :[[#mild symptom]] 軽症 ==== symptom onset ==== :症状の発症 ==== symptom relief ==== :症状の緩和 === symptomatic === ==== symptomatic patient ==== === testing === *<span style="font-family:Times New Roman;font-size:13pt;">''see also'' [[#COVID-19 testing]]</span> *例文 <span style="font-family:Times New Roman;font-size:13pt;">Trump says he told his people too much coronavirus <span style="color:#f55;">testing</span> puts US at 'disadvantage,' contradicting staff</span> <ref><span style="font-family:Times New Roman;">[https://edition.cnn.com/2020/06/22/politics/donald-trump-testing-slow-down-response/index.html Trump says he told his people too much coronavirus testing puts US at 'disadvantage,' contradicting staff - CNNPolitics] [https://edition.cnn.com/politics CNNPolitics] 2020年6月23日記事</span> </ref> *:トランプ(米大統領)によると、彼は彼の(選挙運動集会に集まった)人々に、コロナウイルスの検査が多過ぎることは米国を「不利な立場」に置く、と語ったという。スタッフは否認。 === vaccine === {{Wikipedia|en:Vaccine|Vaccine}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:vaccine#English|vaccine]] /vækˈsiːn/, :  </span>「ヴァクスィーン」と読む。[[file:En-us-vaccine.ogg]]      (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#vaccin|vaccin]]'''</span>) ==== vaccine hesitancy ==== {{Wikipedia|en:Vaccine hesitancy|Vaccine hesitancy}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:vaccine#English|vaccine]] [[wikt:en:hesitancy|hesitancy]]  :  </span> <div style="text-align:left;">[[画像:Antivax protest in London 1.jpg|thumb|500px|A protest against COVID-19 vaccines, in [[w:en:Islington|Islington]], London, on 18 September 2021.<br>2021年9月18日、ロンドン・[[w:イズリントン|イズリントン地区]]におけるCOVID-19のワクチンに対する抗議デモ行進。]]</div> <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br> === variant === {{Wikipedia|en:Ventilator|Variant (biology)}} {{Wikipedia|en:Ventilator|Variants of SARS-CoV-2}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:variant#English|variant]] :   /ˈvɛəɹi.ənt/, /ˈvæɹi.ənt/ </span> :変異体(変異株、変異ウイルス)     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#variant|variant]]'''</span>) ::(※「変異種」は誤用とされている<ref>[https://www.kansensho.or.jp/modules/news/index.php?content_id=221 【重要】変異「種」の誤用について](日本感染症学会)</ref>) === variant of concern (VOC) === {{Wikipedia|en:Variant of concern|Variant of concern}} *<span style="font-family:Times New Roman;font-size:13pt;">variant of concern :  /ˈvɛəɹi.ənt ʌv kənˈsɝn/ </span> *:[[w:懸念される変異株|懸念される変異株]] *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#variant préoccupant|variant préoccupant]]'''</span>) === variant of interest (VOI) === *<span style="font-family:Times New Roman;font-size:13pt;">variant of interest :  /ˈvɛəɹi.ənt ʌv ˈɪntəɹəst/ </span> *:[[w:懸念される変異株#注目すべき変異株|注目すべき変異株]] *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#variant à suivre|variant à suivre]]'''</span>) === ventilator === {{Wikipedia|en:Ventilator|Ventilator}} :[[w:人工呼吸器|人工呼吸器]]     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#respirateur artificiel|respirateur artificiel]]'''</span>、<span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#ventilateur|ventilateur]]'''</span>) === viral === {{Wikipedia|en:Viral|Viral}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:viral#English|viral]] :   /ˈvaɪɹəl/ </span> *: (細菌・ウイルスなどの) 変種、株     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#viral|viral]]'''</span>) ==== viral envelope ==== {{Wikipedia|en:Viral envelope|Viral envelope}} :[[w:エンベロープ (ウイルス)|エンベロープ]]     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#enveloppe virale|enveloppe virale]]'''</span>) ==== viral infection ==== *<span style="font-family:Times New Roman;font-size:13pt;">[[#viral|viral]] [[#infection|infection]] :   /ˈvaɪɹəl ɪnˈfɛkʃən/ </span> ==== viral load ==== *'''ウイルス量''' (=血液中のウイルス濃度)<ref>[https://lsd-project.jp/weblsd/o/begin/viral%20load ライフサイエンス辞書 viral load] などを参照。</ref> ==== viral strain ==== *<span style="font-family:Times New Roman;font-size:13pt;">[[#viral|viral]] [[#strain|strain]] :   /ˈvaɪɹəl stɹeɪ̯n/ </span> *:ウイルス株     (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#souche virale|souche virale]]'''</span>) === virological === ==== virological assessment ==== === virologist === :ウイルス学者 === virology === :ウイルス学 === virulence === {{Wikipedia|en:Virulence|Virulence}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:virulence|virulence]] : /ˈvɪɹjələns/, /ˈvɪɹələns/ </span> *:毒性 *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#virulence|virulence]]'''</span>) === virulent === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:virulent#English|virulent]] : /ˈvɪɹ(j)ələnt/ </span> *:毒性のある *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#virulent|virulent]]'''</span>) === virus === === VOC === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:VOC#English|VOC]] : (medicine) Abbreviation of [[#variant of concern]].</span> : [[#variant of concern]] の略語。 === VOI === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:VOI#English|VOI]] : (medicine) Abbreviation of [[#variant of interest]].</span> : [[#variant of interest]] の略語。 === wastewater === {{Wikipedia|en:Wastewater|Wastewater}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:wastewater#English|wastewater]] :  米 \'westwɔtɚ\,  英 \ˈweɪst wɔːtə\   </span> *: [[wikt:en:汚水|汚水]]、廃水   *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#eaux usées|eaux usées]]'''</span>) *:類義語: <span style="font-family:Times New Roman;">[[#sewage]]</span>(下水) **例文  <span style="font-family:Times New Roman;font-size:13pt;">How <span style="color:red;">Wastewater</span> Could Help Track the [[#spread|#Spread]] of the New [[#coronavirus (CoV)|Coronavirus]]</span> <ref>[https://www.smithsonianmag.com/science-nature/how-wastewater-could-help-track-spread-new-coronavirus-180974858/ Can COVID-19 Spread Through Sewage Science Smithsonian Magazine]、 [[w:スミソニアン博物館|スミソニアン学術協会]]公式ジャーナル([[w:en:Smithsonian (magazine)|Smithsonian Magazine]]) 2020年5月14日記事、などを参照。</ref> *:<span style="color:red;">汚水(下水)</span>は、新たなコロナウイルスの蔓延をたどるのに、どのように役立つのか? === wave === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:wave#Etymology_2|wave]] &nbsp;&nbsp;&nbsp; /weɪv/ :</span> *:波 {| class="wikitable" |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:first#English|first]] wave |第一波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:second#English|second]] wave &nbsp;&nbsp; |第二波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:third#English|third]] wave |第三波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:fourth#English|fourth]] wave |第四波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:fifth#English|fifth]] wave |第五波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:sixth#English|sixth]] wave |第六波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:seventh#English|seventh]] wave |第七波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:eighth#English|eighth]] wave |第八波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:ninth#English|ninth]] wave |第九波 |- style="font-family:Times New Roman;font-size:13pt;" |[[wikt:en:tenth#English|tenth]] wave |第十波 |} *: (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#vague|vague]]'''</span>) <div style="background-color:brown;"> === Black Lives Matter === {{Wikipedia|en:Black Lives Matter|Black Lives Matter}} ==== George Floyd protests ==== {| |- style="background-color:#ddd;" | style="vertical-align:top;text-align:right;" | <br>[[w:en:Killing of George Floyd|Killing of George Floyd]]<br>[[w:ジョージ・フロイドの死|ジョージ・フロイドの死]] | style="vertical-align:top;text-align:left;" |[[画像:Protest against police violence - Justice for George Floyd, May 26, 2020 11.jpg|330px]]<br>[[w:en:George Floyd protests|George Floyd protests]]<br>[[w:ジョージ・フロイド抗議運動|ジョージ・フロイド抗議運動]] |} : (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#Black Lives Matter​|Black Lives Matter​]]'''</span>) </div> <br> <div style="background-color:lightgray;"> === Coronavirus recession === {{Wikipedia|en:Coronavirus recession|Coronavirus recession}} コロナウイルス不況 {| |- style="background-color:#ddd;" | style="vertical-align:top;text-align:right;" |[[画像:Stock-indices-2020crash.svg|300px]]<br>[[w:en:2020 stock market crash|2020 stock market crash]]<br>[[w:2020年の株価大暴落|2020年の株価大暴落]] | style="vertical-align:top;text-align:left;" |[[画像:A nearly empty flight from PEK to LAX amid the COVID-19 pandemic 1.jpg|300px]]<br> An almost empty flight<br> (ほとんど空席のフライト) |} : (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#Crise économique du Covid-19|Crise économique du Covid-19​]]'''</span>) </div> <br> <div style="background-color:khaki;"> === 2019–20 locust infestation === {{Wikipedia|en:2019–20 locust infestation|2019–20 locust infestation}} {{Wikipedia|en:Desert locust|Desert locust}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:desert#English|desert]] [[wikt:en:locust#English|locust]]  :  /ˈdɛzɚt loʊ.kəst/, /ˈdezət ləʊ.kəst/ : </span> **例文 <span style="font-family:Times New Roman;font-size:13pt;">How do you fight a locust invasion amid coronavirus?</span> <ref>[https://www.bbc.com/news/world-africa-52394888 How do you fight a locust invasion amid coronavirus - BBC News] BBC 2020年4月25日記事、などを参照。</ref> **:コロナウイルスの最中に、バッタの侵入にどう対処しますか? {| |- | style="text-align:right;" |[[画像:Schistocerca gregaria - Wüstenheuschrecke.jpg|300px]]<br>[[w:en:Desert locust|Desert locust]] | style="text-align:left;" |[[画像:Schistocerca gregaria L1 hoppers.jpg|300px]]<br>[[w:サバクトビバッタ|サバクトビバッタ]] |} : (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#Invasion de criquets de 2019-2020|Invasion de criquets de 2019-2020]]'''</span>) </div> <!-- {{Wikipedia|en:Antibody|Antibody}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:en:|]] :   </span> :   (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/仏語#|]]'''</span>) *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> *<span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> *<span style="font-family:Times New Roman;"><span style="font-size:13pt;"></span></span> --> == 脚注 == === 注釈 === {{Reflist| group="注釈"}} === 出典等 === {{Reflist}} == 参考文献 == === Merriam-Webster's Medical Dictionary (2016) === *Merriam-Webster's Medical Dictionary, Newest Edition, **[[w:en:Merriam-Webster|Merriam-Webster, Inc.]], 2016, <nowiki>ISBN978-0-87779-294-9</nowiki> === Black's Student Medical Dictionary (2011) === *[[w:en:Black's Medical Dictionary|Black's Student Medical Dictionary]] 3rd Edition, **Edited by Dr Harvey Marcovitch, [[w:en:Bloomsbury Publishing|Bloomsbury Publishing]], 2011 **:(引用項目) [[#infection|Infection]], [[#pandemic|Pandemic]] == 関連項目 == *[[トランスリンガル図鑑]] == 外部リンク == === <span style="font-size:20pt;">WHO</span> (英語) === *[https://www.who.int/ www.who.int/] - 世界保健機関 (WHO) **[https://www.who.int/emergencies/diseases/novel-coronavirus-2019 www.who.int/emergencies/diseases/novel-coronavirus-2019] - Coronavirus disease 2019 (COVID-19) ***[https://www.who.int/emergencies/diseases/novel-coronavirus-2019/advice-for-public /advice-for-public] - (COVID-19) advice for the public ***[https://www.who.int/emergencies/diseases/novel-coronavirus-2019/technical-guidance /technical-guidance] - (COVID-19) Country & Technical Guidance === <span style="font-size:20pt;">CDC</span> (Centers for Disease Control and Prevention) === *[https://www.cdc.gov/ www.cdc.gov/] - [[w:en:Centers for Disease Control and Prevention|Centers for Disease Control and Prevention]] ([[w:アメリカ疾病予防管理センター|米疾病予防管理センター]]) **<span style="background-color:#ffa;font-size:15pt;">[https://www.cdc.gov/coronavirus/2019-ncov/index.html /coronavirus/2019-ncov/] - Coronavirus Disease 2019 (COVID-19) CDC</span> === <span style="font-size:20pt;">ECDC</span> (European Centre for Disease Prevention and Control) === *[https://www.ecdc.europa.eu/en https://www.ecdc.europa.eu/en] - [[w:en:European Centre for Disease Prevention and Control|European Centre for Disease Prevention and Control]]([[w:欧州疾病予防管理センター|欧州疾病予防管理センター]]:本部はストックホルム) **[https://www.ecdc.europa.eu/en/covid-19 COVID-19] **[https://qap.ecdc.europa.eu/public/extensions/COVID-19/COVID-19.html#global-overview-tab COVID-19] === Harvard T.H. Chan School of Public Health === *[https://www.hsph.harvard.edu/ www.hsph.harvard.edu/] *:<span style="font-family:Times New Roman;font-size:15pt;">[[w:en:Harvard T.H. Chan School of Public Health|the Harvard T.H. Chan School of Public Health]](ハーバード大学T.H.Chan公衆衛生大学院)</span> **[https://www.hsph.harvard.edu/coronavirus/ /coronavirus/] - <span style="font-family:Times New Roman;font-size:15pt;">Coronavirus (COVID-19) Guidance for Harvard Chan Community</span> === <span style="font-size:22pt;">COVID-19の統計データ・サイト</span> === ==== <span style="font-size:20pt;">COVID-19 Dashboard at Johns Hopkins University (JHU)</span> ==== *<span style="background-color:#ffb;font-size:15pt;">[https://gisanddata.maps.arcgis.com/apps/opsdashboard/index.html#/bda7594740fd40299423467b48e9ecf6 gisanddata.maps.arcgis.com/apps/opsdashboard/]</span> *:[[w:en:Johns Hopkins University|Johns Hopkins University (JHU)]](ジョンズ・ホプキンス大学)のシステム科学工学センター (CSSE) によるCOVID-19の統計データ・サイト ==== <span style="font-size:20pt;">WHO COVID-19 Dashboard</span> (英語のみ) ==== *<span style="background-color:#ffb;font-size:20pt;"><big>[https://covid19.who.int/ covid19.who.int/]</big> - WHO COVID-19 Dashboard : </span> *:COVID-19 の Confirmed Cases (確定症例数)・New Cases (新規症例数)・Deaths (死亡者数)を、Cumulative(累計)・Daily (日別)で、並びに、Globally (世界全体)・Regions (地域別)などで概観 (Overview) することができる。 **<span style="background-color:#ffc;font-size:15pt;">[https://covid19.who.int/explorer covid19.who.int/explorer] - WHO COVID-19 Data Explorer</span> **:Confirmed Cases (確定症例数)・Cumulative Cases (累積症例数)・Deaths (死亡者数)・Cumulative Deaths (累積死亡者数)・Population (人口)などの条件をX軸・Y軸・Z軸に選び、Countries, Territories, or Areas (国・領土・地域)を選ぶと、2020年3月6日以降の日ごとの推移を、立体的・動的に比較することができる優れもののグラフ。 *<span style="background-color:#ffb;font-size:15pt;"><big>[https://extranet.who.int/publicemergency extranet.who.int/publicemergency]</big> - WHO Health Emergency Dashboard : </span> *:世界の国々が、それぞれどのような健康上の緊急事態にあるのかを表示できる世界地図。世界各国がCOVID-19に限らず、さまざまな健康上の危機を抱えていることを知ることができる。 ==== <span style="font-size:20pt;">Our World in Data</span> (英語のみ) ==== *[https://ourworldindata.org/ ourworldindata.org/] : [[w:en:Our World in Data|Our World in Data (OWID)]] (世界統計データ・サイト) **<span style="background-color:#ffb;font-size:15pt;"><big>[https://ourworldindata.org/coronavirus ourworldindata.org/coronavirus]</big> : Coronavirus Pandemic (COVID-19) - Statistics and Research - Our World in Data</span> **:COVID-19 の数々の統計データが掲載されている。 ==== <span style="font-size:20pt;">Worldometer</span> (英語のみ) ==== *[https://www.worldometers.info/ www.worldometers.info/] : <u>[[w:en:Worldometer|Worldometer]]</u> - real time world statistics (リアルタイムの世界統計データ・サイト) **<span style="background-color:#ffb;font-size:15pt;"><big>[https://www.worldometers.info/coronavirus/ www.worldometers.info/coronavirus/]</big> : Coronavirus Update (Live) ○,○○○,○○○ Cases and ○○○,○○○ Deaths from COVID-19 Virus Pandemic - Worldometer</span> **:世界全体および国・地域別に、 Total Cases(累積確定症例数)、New Cases(新規確定症例数)、Total Deaths(累積死亡者数)、New Death(新規死亡者数)、Total Recovered(累積回復者数)、Active Cases(治療中の症例数)、Serious, Critical(重症・重篤症例数)、Total Tests(累積検査数)および 1M pop(百万人)当たりの割合、ならびに、Mortality Rate(致死率)、Symptoms(症状の割合)、Incubation Period(潜伏期の長さ)、Transmission(伝染経路)など、詳細な分析がある。 === ニュースサイト === ==== <span style="font-size:20pt;">The Guardian</span> ==== *<span style="background-color:#ffb;font-size:15pt;">[https://www.theguardian.com/international www.theguardian.com] - the Guardian's global edition [[w:en:The Guardian|The Guardian]]</span> : [[w:ガーディアン|ガーディアン]](イギリスの大手日刊紙) **<span style="background-color:#ffb;font-size:20pt;background-color:#ffc;">[https://www.theguardian.com/world/coronavirus-outbreak Coronavirus outbreak The Guardian]</span> [[Category:トランスリンガル図鑑|C]] [[カテゴリ:新型コロナウイルス感染症]] [[カテゴリ:英語]] e2t24tbcqjwzp52gmztn0qnyiq0uoux トランスリンガル図鑑/新型コロナウイルス感染症/仏語 0 28026 304567 218987 2026-10-10T20:49:52Z CommonsDelinker 786 [[Commons:User:Jameslwoodward|Jameslwoodward]] によってCommonsから削除された George_Floyd_mural_Mauerpark_Berlin_2020-05-30_03.jpg を除去。理由: per [[:c:Commons:Deletion requests/Files in Category:George Floyd mural Mauerpark Berlin|]]. 304567 wikitext text/x-wiki {{Pathnav|メインページ|語学|トランスリンガル図鑑|新型コロナウイルス感染症|frame=1|small=1}} {| align="center" |- | colspan="2" style="background-color: gray; text-align: center; vertical-align: center; font-size: x-large; font-weight: bold; padding-bottom:10px;"| |- | colspan="2" style="text-align: left; vertical-align: bottom; font-family:Times New Roman; font-size: 20pt; font-weight: bold; "| |- | colspan="2" style="text-align:center;" |[[画像:OFSP affiche coronavirus distance.jpg|600px]] |- | colspan="2" style="text-align:center;" |<span style="font-size:13pt;color:#555;"></span> |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" | スウェーデン公衆衛生局によるCOVID-19予防啓発 | |- | style="text-align:left;font-family:Times New Roman;font-size:15pt;background-color:#ddd;color:#005;" |  W - wash hands | : | |- | colspan="2" style="background-color: gray; text-align: center; vertical-align: center; font-size: x-large; font-weight: bold; padding-bottom:10px;"| |} == Prévention des coronavirus COVID-19 == === Se protéger et protéger les autres de l'infection === [[画像:FHM-Covid-19-Undvik-smitta-a4-franska raster.svg|300px]] <br> === À propos du nouveau Coronavirus et du la maladie appelé COVID-19 === [[画像:FHM-Covid-19-Faktablad-covid-19-franska.pdf|300px]] <br> == Terminologie == === à domicile === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:à domicile|à domicile]]  :  \a dɔ.mi.sil\ </span> *:在宅での *# <span style="font-family:Times New Roman;font-size:13pt;">[[#hospitalisation à domicile]]</span> (在宅医療) *# <span style="font-family:Times New Roman;font-size:13pt;">[[#télétravail à domicile]]</span>   (在宅でのテレワーク) === acide désoxyribonucléique === === acide ribonucléique === === ACP === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:ACP|ACP]]  :  \a.se.pe\ </span> : [[#amplification en chaîne par polymérase]] の略語。 === ADN === [[#acide désoxyribonucléique]] === amplification en chaîne par polymérase === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:amplification en chaîne par polymérase|amplification en chaîne par polymérase]] (''f'' )</span>  \ɑ̃.pli.fi.ka.sjɔ̃ ɑ̃ ʃɛn paʁ po.li.me.ʁaz\ </span>:  *:[[w:ポリメラーゼ連鎖反応|ポリメラーゼ連鎖反応]] (<span style="font-family:Times New Roman;">[[#réaction en chaîne par polymérase]], [[#ACP]]</span> に同じ。)  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#polymerase chain reaction|polymerase chain reaction]]''') === agent infectieux === {{Wikipedia|fr:Agent infectieux|Agent infectieux}} :[[w:病原体|病原体]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#pathogen|pathogen]]''') === anticorps === {{Wikipedia|fr:Anticorps|Anticorps}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:anticorps#Français|anticorps]] (''m'')</span>  \ɑ̃.ti.kɔʁ\ </span>: *:[[w:抗体|抗体]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#antibody|antibody]]''') === antigène === {{Wikipedia|fr:Antigène|Antigène}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:antigène#Français|antigène]] (''m'')</span>  \ɑ̃.ti.ʒɛn\ </span>: *:[[w:抗原|抗原]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#antigen|antigen]]''') === ARN === [[#acide ribonucléique]] === cas === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:cas#Français|cas]] (''m'')</span>  \kɑ\ </span> *:症例、患者    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#case|case]]''') ==== cas confirmé ==== :確定症例 (確認された症例)、確認された患者    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#confirmed case|confirmed case]]''') ==== cas confirmés de Covid-19 ==== *:COVID-19の確定症例(数)    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#confirmed cases of COVID-19|confirmed cases of COVID-19]]''') ==== cas de contamination ==== *<span style="font-family:Times New Roman;font-size:13pt;">cas de [[#contamination|contamination]]</span> :感染症例 ==== cas sévère ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[#cas|cas]] [[#sévère|sévère]] (''m'')</span>  \kɑ se.vɛʁ\ </span>:  *:'''重症例'''    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#severe case|severe case]]''') **(複数) <span style="font-family:Times New Roman;font-size:13pt;">(les) cas sévères</span> **⇒ '''重症'''   <span style="font-family:Times New Roman;font-size:13pt;"> le [[#symptôme sévère|symptôme sévère]]</span> === choc cytokinique === {{Wikipedia|fr:Choc cytokinique|Choc cytokinique}} :<span style="font-family:Times New Roman;font-size:13pt;">choc [[#cytokinique]]</span>    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#cytokine storm|cytokine storm]]''') === confinement === {{Wikipedia|fr:Confinement (mesure sanitaire)|Confinement (mesure sanitaire)}} {{Wiktionary|fr:Thésaurus:confinement/français|Thésaurus:confinement}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:confinement#Français|confinement]] (''m'')</span>  \kɔ̃.fin.mɑ̃\, \kɔ̃.fi.nə.mɑ̃\ </span>: *: 閉じ込めること、閉じこもること、隔離 ;  *:(感染拡大にともなう)防疫隔離 (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#quarantine|quarantine]]''')、 *:封鎖措置・ロックダウン (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#lockdown|lockdown]]''') *: ⇒対義語 [[#déconfinement]] === confiner === ==== confiné ==== === contact === *<span style="font-family:Times New Roman;font-size:13pt;">Le contact avec des mains non lavées ou des surfaces souillées par des [[#gouttelette|gouttelette]]s est également à [[#risque de contamination]].</span><ref>[[#Info Coronavirus COVID-19 : Gouvernement.fr]] などを参照。</ref> *:洗っていない手での接触、あるいは、飛沫でぬれた表面との接触では、感染のリスクがあります。 ==== contact direct physique ==== ==== contact indirect ==== === contagion === === contamination === :[[#risque de contamination]] (感染のリスク) === coronavirus (CoV) === [[画像:TEM of coronavirus OC43.jpg|thumb|right|250px|<span style="font-family:Times New Roman;">[[w:fr:Coronavirus humain OC43|Coronavirus humain OC43 (HCoV-OC43)]]</span><br>[[w:ヒトコロナウイルスOC43|ヒトコロナウイルスOC43]] ]] {{Wikipedia|fr:Coronavirus|Coronavirus}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:coronavirus#Français|coronavirus]]  (''m'')</span>    \kɔ.ʁɔ.na.vi.ʁys\  :[[File:LL-Q150 (fra)-Poslovitch-coronavirus.wav]] un groupe de [[#virus à ARN|Virus à ARN]] qui constituent la sous-famille des Orthocoronavirinae de la famille des [[wikt:fr:Coronaviridae|Coronaviridae]] de l'ordre des [[wikt:en:Nidovirales|Nidovirales]]. </span> *:'''[[wikt:fr:コロナウイルス|コロナウイルス]]'''  :  [[w:ニドウイルス目|ニドウイルス目]] [[w:コロナウイルス科|コロナウイルス科]]の[[w:オルトコロナウイルス亜科|オルトコロナウイルス亜科]]を構成する[[w:RNAウイルス|RNAウイルス]]のグループ   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#coronavirus (CoV)|coronavirus]]''') **例文  <span style="font-family:Times New Roman;font-size:13pt;">Qu'est-ce qu'un <span style="color:red;">coronavirus</span> ?</span> <ref>[https://sante.journaldesfemmes.fr/fiches-maladies/2607859-definition-famille-coronavirus-origine-nom-virus-symptome-incubation-traitement-transmission/ Qu'est-ce qu'un coronavirus] [[w:fr:Le Journal des femmes|Le Journal des femmes]]([https://sante.journaldesfemmes.fr/ sante.journaldesfemmes.fr/])2020年4月23日記事、などを参照。</ref> **:<span style="font-family:Times New Roman;font-size:13pt;"><span style="color:red;">コロナウイルス</span>って何ですか?</span> ==== coronavirus de chauve-souris WIV1 lié au SRAS ==== {{Wikipedia|fr:Coronavirus de chauve-souris WIV1 lié au SRAS|Coronavirus de chauve-souris WIV1 lié au SRAS}} :SARS関連コウモリ・コロナウイルスWIV<sub>1</sub> ==== coronavirus du syndrome respiratoire aigu sévère (SARS-CoV) ==== {{Wikipedia|fr:SARS-CoV|SARS-CoV}} ==== coronavirus 2 du syndrome respiratoire aigu sévère (SARS-CoV-2) ==== {{Wikipedia|fr:Coronavirus 2 du syndrome respiratoire aigu sévère|Coronavirus 2 du syndrome respiratoire aigu sévère}} ==== coronavirus du syndrome respiratoire du Moyen-Orient (MERS-CoV) ==== {{Wikipedia|fr:Coronavirus du syndrome respiratoire du Moyen-Orient|Coronavirus du syndrome respiratoire du Moyen-Orient}} ==== Coronavirus lié au syndrome respiratoire aigu sévère (SARSr-CoV) ==== {{Wikipedia|fr:Coronavirus lié au syndrome respiratoire aigu sévère|Coronavirus lié au syndrome respiratoire aigu sévère}} === Covid-19 === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:Covid-19#Français|Covid-19]]  (''féminin''</span> ''ou'' <span style="background-color:#bdf;">''masculin''</span> ''(l’usage hésite)'')   \kɔ.vid.diz.nœf\  : </span> 「コヴィド ディズヌフ」と読む。[[File:LL-Q150 (fra)-Fabricio Cardenas (Culex)-Covid-19.wav]] *:<span style="font-family:Times New Roman;">''Voir'' <span style="font-size:13pt;">[[#maladie à coronavirus 2019 (Covid-19)]]</span></span> ;Variantes orthographiques *<span style="font-family:Times New Roman;"><span style="font-size:13pt;">COVID-19</span>   ''(Plus courant au Canada)''</span> *<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#nouveau coronavirus]]</span></span> *'''関連記事リンク''' *:"Covid-19", le nouveau coronavirus ([[w:fr:L'Express|L'Express]] レクスプレス誌)<ref name="L'Express_covid-19">[https://www.lexpress.fr/actualite/societe/sante/2019-ncv-le-nouveau-virus-venu-de-chine_2115677.html Covid-19, le nouveau coronavirus - L'Express] レクスプレス誌([[w:fr:L'Express|L'Express]])の解説記事。</ref> ==== covidé ==== *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:covidé#Français|covidé]]      \kɔ.vi.de\ </span> *#<span style="font-family:Times New Roman;font-size:13pt;">Relatif au Covid-19.</span>   〔形容詞〕 [[#Covid-19]] に関連する、Covid-19 に罹患した *#<span style="font-family:Times New Roman;font-size:13pt;">Personne atteinte du Covid-19. </span>   〔名詞〕 Covid-19 に罹患した人 === cytokine === {{Wikipedia|fr:Cytokine|Cytokine}} :[[w:サイトカイン|サイトカイン]]<ref>[https://bifidus-fund.jp/keyword/kw048.shtml サイトカイン(cytokine)|用語集|腸内細菌学会]((公法) 腸内細菌学会)などを参照。</ref>   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#cytokine|cytokine]]''') === cytokinique === :<span style="font-family:Times New Roman;font-size:13pt;">[[#choc cytokinique]]</span> === déconfinement === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:déconfinement#Français|déconfinement]]  (''m'')</span>  \de.kɔ̃.fin.mɑ̃\, \de.kɔ̃.fi.nə.mɑ̃\  : Arrêt d’un confinement.</span> *:防疫隔離・封鎖措置(ロックダウン)の停止 *: ⇒対義語 [[#confinement]] === deuxième vague === :第二波 *<span style="font-family:Times New Roman;font-size:13pt;">Une deuxième vague de coronavirus </span> *:コロナウイルスの第二波 :<span style="font-family:Times New Roman;font-size:13pt;">''voir ausii'' [[#vague]]</span> === diagnostic === {{Wikipedia|fr:Diagnostic (médecine)|Diagnostic (médecine)}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:diagnostic#Français|diagnostic]]  (''m'')</span>  \djaɡ.nɔs.tik\ : ''(Médecine)'' Partie de la médecine qui a pour objet la [[#distinction|distinction]] des [[#maladie|maladie]]s.</span> *:診断    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#diagnosis|diagnosis]]''') === diffusion === ==== diffusion explosif du virus ==== :ウイルスの爆発的広がり === désinfectant === :消毒剤 === eaux usées === {{Wikipedia|fr:Eaux usées|Eaux usées}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:eaux usées#Français|eaux usées]] (''f'' )</span>  \o y.ze\ </span> *:[[wikt:下水|下水]]、[[wikt:汚水|汚水]]、廃水 *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#sewage|sewage]]''', '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#wastewater|wastewater]]''') **例文  <span style="font-family:Times New Roman;font-size:13pt;">[[#Covid-19]] : l'analyse des <span style="color:red;">eaux usées</span> [[wikt:fr:serait#Français|serait]] un bon indicateur de la [[#propagation]] du [[#virus]]</span> <ref>[https://www.ladepeche.fr/2020/05/19/covid-19-lanalyse-des-eaux-usees-serait-un-bon-indicateur-de-la-propagation-du-virus,8894227.php Covid-19 l'analyse des eaux usées serait un bon indicateur de la propagation du virus - ladepeche.fr] [[w:fr:La Dépêche du Midi|La Dépêche du Midi]](フランス南東部の日刊地方紙) 2020年5月19日記事、などを参照。</ref> **:<span style="font-family:Times New Roman;font-size:13pt;">COVID-19 : <span style="color:red;">下水</span>の検査は、ウイルスの広がりの良き指標となるだろう。</span> === éclosion de maladie === *<span style="font-family:Times New Roman;font-size:13pt;">Éclosions de maladies</span> : アウトブレイク **<small>カナダでは、英語の outbreak と同じ意味で éclosion を用いている。例えば、次のページなどを比べてみよ。</small> **:[[画像:Flag of France.svg|border|25px]] [https://www.canada.ca/fr/sante-publique/services/maladies/2019-nouveau-coronavirus.html? Maladie à coronavirus (COVID-19) Mise à jour sur l’éclosion] **:[[画像:Flag of the United Kingdom.svg|border|25px]] [https://www.canada.ca/en/public-health/services/diseases/2019-novel-coronavirus-infection.html Coronavirus disease (COVID-19) Outbreak update] **éclosion という単語は、たいていは卵の[[w:孵化|孵化]] ([[w:fr:Éclosion|Éclosion]], [[w:en:Hatchling|Hatchling]]) の意味で用いられることが多い。 === écran facial === {{Wikipedia|fr:Écran facial|Écran facial}} :[[w:フェイスシールド|フェイスシールド]]  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#face shield|face shield]]''') === effondrement === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:effondrement#Français|effondrement]]  (''m'')</span>    \e.fɔ̃.dʁə.mɑ̃\  :</span> *:崩壊  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#collapse|collapse]]''') ==== effondrement de la médecine d'urgence ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:effondrement#Français|effondrement]]</span> de la [[#médecine|médecine]] d'[[#urgences|urgence]]   <span style="background-color:#bdf;">(''m'')</span>    \e.fɔ̃.dʁə.mɑ̃ də la dyʁʒɑ̃s\  :</span> <ref>[https://alt-rev.com/2020/05/28/au-japon-la-pandemie-a-brise-le-grand-reve-de-puissance-de-shinzo-abe/ Au Japon, la pandémie a brisé le grand rêve de puissance de Shinzo Abe - Alternative Révolutionnaire Communiste] などを参照。</ref> *:救急医療の崩壊 ==== effondrement du système de santé ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:effondrement#Français|effondrement]]</span> du [[wikt:fr:système#Français|système]] de [[wikt:fr:santé#Français|santé]]   <span style="background-color:#bdf;">(''m'')</span>    \e.fɔ̃.dʁə.mɑ̃ dy sis.tɛm də sɑ̃.te\  :</span> *:医療体制の崩壊 (医療崩壊)  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#collapse of the healthcare system|collapse of the healthcare system]]''') === enveloppe virale === [[画像:Influenza virus particle 8430 lores-Beschriftung-fr.jpg|thumb|right|200px|<div style="text-align:center;">L''''[[w:fr:Enveloppe virale|Enveloppe virale]]'''</div>]] :[[w:エンベロープ (ウイルス)|エンベロープ]]  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#viral envelope|viral envelope]]''') === EPI === :<span style="font-family:Times New Roman;font-size:13pt;">''Voir''' [[#équipement de protection individuelle]]</span> === épidémie === {{Wikipedia|fr:Épidémie|Épidémie}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:épidémie|épidémie]] (''f'' )</span>  \e.pi.de.mi\ </span> : Maladie qui atteint en même temps et dans le même lieu un grand nombre de personnes ou d'animaux. *:(病気の)流行、蔓延。伝染病・流行病。   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#epidemic|epidemic]]''') === équipement de protection individuelle === {{Wikipedia|fr:Équipement de protection individuelle|Équipement de protection individuelle}} <span style="font-family:Times New Roman;font-size:13pt;"> </span> *:個人防護具   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#personal protective equipment​|personal protective equipment​]]''') === évolution === === explosif === :爆発的な === fausse === ==== fausse rumeur ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[#faux|fausse]] [[#rumeur|rumeur]] (''f'' )</span>  \fos ʁy.mœʁ\ </span> : 虚偽のうわさ、デマ      (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#false rumour|false rumour]]''')      (⇒[[画像:Flag of the United States.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#false rumor|false rumor]]''') === facilitation de l'infection par des anticorps === {{Wikipedia|fr:Facilitation de l'infection par des anticorps|Facilitation de l'infection par des anticorps}} *<div style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:facilitation#Français|facilitation]]</span> de l'<span style="background-color:#fdb;">[[wikt:fr:infection#Français|infection]]</span> par des <span style="background-color:#bdf;">[[wikt:fr:anticorps|anticorps]]</span> *:\fa.si.li.ta.sjɔ̃.&nbsp; də.lɛ̃.fɛk.sjɔ̃.&nbsp; paʁ.de.&nbsp; zɑ̃.ti.kɔʁ\ :</div> **抗体による感染の容易化('''[[w:抗体依存性感染増強|抗体依存性感染増強]]''')      (⇒[[画像:Flag of the United States.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#antibody-dependent enhancement (ADE)|antibody-dependent enhancement (ADE)]]''') === faux === ==== faux négatif ==== {{Wikipedia|fr:Faux négatif|Faux négatif}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:faux négatif#Français|faux négatif]] (''m'')</span>  \fo ne.ga.tif\ </span> *:'''偽陰性''' : 本来は陽性であるはずの検査で、誤って陰性と判定されてしまうこと。<ref>[https://kotobank.jp/word/%E5%81%BD%E9%99%B0%E6%80%A7-1829714 偽陰性(ギインセイ)とは - コトバンク]、[https://dictionary.goo.ne.jp/word/%E5%81%BD%E9%99%B0%E6%80%A7/#jn-292558 偽陰性(ぎいんせい)の意味 - goo国語辞書] などを参照。</ref><ref group="注釈" name="偽陰性と偽陽性">医学的な検査には感度([[#sensibilité]])と特異度([[#spécificité]])があり、例えば新型コロナウイルスを検出するPCR検査の感度は70%程度であるとされている。つまり、3割の検査では、感染しているのに「陰性」と判定される偽陰性、あるいは逆に、感染していないのに「陽性」と判定される偽陽性がありうるということである。⇒①[https://jeaweb.jp/covid/qa/index.html Q1:新型コロナウイルス検査は、どのくらい正確なのですか?;Q2:PCR検査とはどんなものですか?] ([[w:日本疫学会|日本疫学会]]) あるいは ②[https://kanagawa-med.or.jp/corona_news/pcr%E6%A4%9C%E6%9F%BB%E3%81%AE%E7%89%B9%E6%80%A7%E3%81%A8%E9%99%90%E7%95%8C/ PCR検査の特性と限界 (神奈川県医師会)] などを参照。</ref>   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#false negative|false negative]]''') ==== faux positif ==== {{Wikipedia|fr:Faux positif|Faux positif}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:faux positif#Français|faux positif]] (''m'')</span>  \fo pɔ.zi.tif\ </span> *:'''偽陽性''' : 本来は陰性であるはずの検査で、誤って陽性と判定されてしまうこと。<ref>[https://kotobank.jp/word/%E5%81%BD%E9%99%BD%E6%80%A7-674743 偽陽性(ギヨウセイ)とは - コトバンク]、[https://dictionary.goo.ne.jp/word/%E5%81%BD%E9%99%BD%E6%80%A7/#jn-253702 偽陽性(ぎようせい)の意味 - goo国語辞書] などを参照。</ref><ref group="注釈" name="偽陰性と偽陽性"/>  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#false positive|false positive]]''')  **用例 <span style="font-family:Times New Roman;font-size:13pt;">Selon l’OMS, les cas de “[[#réinfection|réinfection]]” au Covid-19 seraient des <span style="color:red;">faux positif</span>s</span> **:世界保健機関(OMS)によれば、COVID-19の 「再感染」 は <span style="color:red;">偽陽性</span>であろうという。<ref name="siecle20200506">ウェブメディア [https://siecledigital.fr/ Siècle Digital] 2020年5月6日記事 [https://siecledigital.fr/2020/05/06/selon-loms-les-cas-de-reinfection-au-covid-19-seraient-des-faux-positifs/ Selon l'OMS, les cas de réinfection au Covid-19 seraient des faux positifs] などを参照。</ref><ref name="東洋経済20200510">[https://toyokeizai.net/articles/-/349446 コロナ再感染は「偽陽性の公算」韓国で進む研究 ロイター 東洋経済オンライン]東洋経済オンライン2020年5月10日記事 などを参照。</ref> === gène === {{Wikipedia|fr:Gène|Gène}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:gène#Français|gène]] (''m'' )</span>   \ʒɛn\ </span>:  *:[[w:遺伝子|遺伝子]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#gene|gene]]''') === génome === {{Wikipedia|fr:Génome|Génome}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:génome#Français|génome]] (''m'' )</span>   \ʒe.nom\ </span>:  *:[[w:ゲノム|ゲノム]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#genome|genome]]''') === génotype === {{Wikipedia|fr:Génotype|Génotype}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:génotype|génotype]] (''m'' )</span>   \ʒe.nɔ.tip\ </span>:  *:[[w:遺伝子型|遺伝子型]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#genotype|genotype]]''') === gouttelette === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:gouttelette|gouttelette]] (''f'' )</span>   \ɡut.lɛt\ </span>:  *:水[[wikt:fr:滴|滴]](しずく)、[[wikt:en:飛沫|飛沫]]     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#droplet|droplet]]''') ==== gouttelette respiratoire ==== {{Wikipedia|fr:Gouttelette respiratoire|Gouttelette respiratoire}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:gouttelette|gouttelette]] [[wikt:fr:respiratoire|respiratoire]]   (''f'' )</span>   \ɡut.lɛt ʁɛs.pi.ʁa.twaʁ\ </span>:  *:呼吸[[wikt:en:飛沫|飛沫]]     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#respiratory droplet|respiratory droplet]]''') === grippe === {{Wikipedia|fr:Grippe|Grippe}} *<span style="font-family:Times New Roman;font-size:13pt;">Grippe et coronavirus en même temps, un cocktail explosif</span> <ref>[https://www.rts.ch/info/suisse/11306249-grippe-et-coronavirus-en-meme-temps-un-cocktail-explosif.html Grippe et coronavirus en même temps, un cocktail explosif - rts.ch - Suisse] などを参照。</ref> *:インフルエンザとコロナウイルスが同時に、爆発的なカクテル === grippe saisonnière === *<span style="font-family:Times New Roman;font-size:13pt;"></span> *: === hospitalisation === {{Wikipedia|fr:Hospitalisation|Hospitalisation}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:hospitalisation|hospitalisation]] (''f'' )</span>   \ɔs.pi.ta.li.za.sjɔ̃\ </span>:  *:[[wikt:fr:入院#Japonais|入院]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#hospitalisation|hospitalisation]]'''、[[画像:Flag of the United States.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#hospitalization|hospitalization]]''') ==== hospitalisation à domicile ==== {{Wikipedia|fr:Hospitalisation à domicile|Hospitalisation à domicile}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[#hospitalisation|hospitalisation]] [[#à domicile|à domicile]] (''f'' )</span>   \ɔs.pi.ta.li.za.sjɔ̃ \a dɔ.mi.sil\ </span>:  *:[[w:在宅医療|在宅医療]] === hygiène === {{Wikipedia|fr:Hygiène|Hygiène}} {{Wiktionary|fr:Thésaurus:hygiène/français|Thésaurus:hygiène}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:hygiène|hygiène]] (''f'' )</span>   \i.ʒjɛn\ </span>:  *:衛生    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#hygiene|hygiene]]''') === Ig === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:Ig#Français|Ig]] : (Abréviation) de [[#immunoglobuline]].</span> : [[#immunoglobuline]] (免疫グロブリン)の略語。 === immunitaire === === immunisation === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:immunisation|immunisation]] (''f'' )</span>   \i.my.ni.za.sjɔ̃\ </span>: :[[w:免疫化|免疫化(免疫付与)]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#immunization|immunization]]''') === immunité === {{Wikipedia|fr:Immunité (médecine)|Immunité (médecine)}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:immunité|immunité]] (''f'' )</span>   \i.my.ni.te\ </span>: **[[w:免疫 (医学)|免疫]] *:<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#système immunitaire]]</span></span> ==== immunité adaptative ==== :獲得免疫(適応免疫) :<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#système immunitaire adaptatif]]</span></span> ==== immunité innée ==== :自然免疫 :<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#système immunitaire inné]]</span></span> <!-- ==== *:<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#]]</span></span> --> ==== immunité grégaire ==== {{Wikipedia|fr:Immunité grégaire|Immunité grégaire}} :[[w:集団免疫|集団免疫]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#herd immunity|herd immunity]]''') ==== immunité passive ==== {{Wikipedia|fr:Immunité passive|Immunité passive}} :[[w:受動免疫|受動免疫]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#passive immunity|passive immunity]]''') === immunoglobuline === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:immunoglobuline#Français|immunoglobuline]] (''f'' )</span>   \i.my.nɔ.ɡlɔ.by.lin\ </span>: *:'''免疫グロブリン''' (抗体 ([[#anticorps]]) としての構造・機能をもつ一群の血清たんぱく質<ref>[https://kotobank.jp/word/%E5%85%8D%E7%96%AB%E3%82%B0%E3%83%AD%E3%83%96%E3%83%AA%E3%83%B3-165991 免疫グロブリン(めんえきグロブリン)とは - コトバンク] などを参照。</ref>)    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#immunoglobulin|immunoglobulin]]''') === infecteur === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[#infecteur|infecteur]] (''m'')</span>  \ɛ̃.fɛk.tœʁ\ : Celui qui propage une [[#infection|infection]], une [[#contagion|contagion]].</span> *:感染を広げる者 (スプレッダー?) **<span style="font-family:Times New Roman;font-size:13pt;">''Voir aussi'' &nbsp; [[#superinfecteur]]</span>(スーパー・スプレッダー) === infectieuse === === infectieux === === infection === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:infection#Français|infection]] (''f'' )</span>   \ɛ̃.fɛk.sjɔ̃\ </span>: *:感染       (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#infection|infection]]''') ==== infection de percée ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[#infection|infection]]</span> de <span style="background-color:#fdb;">[[wikt:fr:percée|percée]] (''f'' )</span>   \ɛ̃.fɛk.sjɔ̃&nbsp; də&nbsp; pɛʁ.se\ :</span> *:貫通感染('''[[w:打ち抜き感染|打ち抜き感染 (ブレイクスルー感染)]]''') *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#breakthrough infection|breakthrough infection]]''') ==== infection virale ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[#infection|infection]] [[#virale|virale]] (''f'' )</span>   \ɛ̃.fɛk.sjɔ̃ vi.ʁal\ </span>: *:ウイルス感染       (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#viral infection|viral infection]]''') === inoculation === {{Wikipedia|fr:Inoculation|Inoculation}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:inoculation#Français|inoculation]] (''f'' )</span>  \i.nɔ.ky.la.sjɔ̃\ </span>: *:[[w:接種|接種]]  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#inoculation|inoculation]]''') === laver === ;se laver les mains régulièrement === létalité === === maladie === === maladie à coronavirus 2019 (Covid-19) === {{Wikipedia|fr:Maladie à coronavirus 2019|Maladie à coronavirus 2019}} :[[File:LL-Q150 (fra)-Fabricio Cardenas (Culex)-maladie à coronavirus 2019.wav]] === maladie contagieuse === === maladie infectieuse === {{Wikipedia|fr:Maladie infectieuse|Maladie infectieuse}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:mortalité|mortalité]] (''f'' )</span>   \ma.la.di ɛ̃.fɛk.sjøz\ </span>:  **[[#maladie]] + [[#infectieuse]] ([[#infectieux]]) *:感染症 **: ⇒類義語 [[#épidémie]] ==== maladie infectieuse émergente (MIE) ==== {{Wikipedia|fr:Maladie infectieuse émergente|Maladie infectieuse émergente}} === masque === ==== masque chirurgical ==== ==== masque de protection FFP ==== {{Wikipedia|fr:Masque de protection FFP|Masque de protection FFP}} ==== masque N95 ==== {{Wikipedia|fr:Masque N95|Masque N95}} === MERS === <span style="font-family:Times New Roman;">''voir'' <span style="font-size:13pt;">[[#syndrome respiratoire du Moyen-Orient (MERS)]]</span></span> ==== MERS-CoV ==== <span style="font-family:Times New Roman;">''Voir'' <span style="font-size:13pt;">[[#coronavirus du syndrome respiratoire du Moyen-Orient (MERS-CoV)]]</span></span> === mortalité === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:mortalité|mortalité]] (''f'' )</span>  \mɔʁ.ta.li.te\ </span>: 死亡率 **<span style="font-family:Times New Roman;font-size:13pt;">[[#taux de létalité]]</span> === mutation === {{Wikipedia|fr:Mutation (génétique)|Mutation}} :[[w:突然変異|突然変異]] *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#mutation|mutation]]''') *参考記事 <span style="font-family:Times New Roman;font-size:13pt;">Mutation, variant, souche : le lexique pour comprendre les évolutions du coronavirus<ref name="parisien-2020-12-27">[https://www.leparisien.fr/societe/mutation-variant-souche-le-lexique-pour-comprendre-les-evolutions-du-coronavirus-27-12-2020-8416217.php Mutation, variant, souche : le lexique pour comprendre les évolutions du coronavirus](日刊紙[[w:ル・パリジャン|ル・パリジャン]] 2020年12月27日記事)</ref></span> === nombre de reproduction de base === {{Wikipedia|fr:Nombre de reproduction de base|Nombre de reproduction de base}} *[[w:基本再生産数|基本再生産数]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#basic reproduction number|basic reproduction number]]''') === nouveau === ==== nouveau coronavirus ==== {{Wikipedia|fr:Nouveau coronavirus|Nouveau coronavirus}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:nouveau|nouveau]] [[#coronavirus (CoV)|coronavirus]]   (''m'' )</span>   \nu.vo kɔ.ʁɔ.na.vi.ʁys\ </span> : 「ヌボ コロナヴィリュス」と読む。 *:[[wikt:fr:新型#Japonais|新型]] [[wikt:fr:コロナウイルス#Japonais|コロナウイルス]] *:<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#Covid-19]]</span></span> *'''関連記事リンク''' *:"Covid-19", le nouveau coronavirus ([[w:fr:L'Express|L'Express]] レクスプレス誌)<ref name="L'Express_covid-19"/> === pandémie === {{Wikipedia|fr:Pandémie|Pandémie}} {{Wiktionary|fr:Thésaurus:pandémie/français|Thésaurus:pandémie}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:pandémie|pandémie]] (''f'' )</span>   \pɑ̃.de.mi\ </span>: [[#épidémie|Épidémie]] qui affecte une partie significative des populations sur une région importante du globe, plusieurs pays voire plusieurs continents. *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#pandemic|pandemic]]''') === PCR === {{Wikipedia|fr:PCR|PCR}} *''Polymerase Chain Reaction'' de l'anglais : [[#Réaction en chaîne par polymérase]] *:<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#ACP]] ou [[#TAN]]</span></span> *:<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#RT-PCR]]</span></span> ==== ==== ==== PCR quantitative ==== {{Wikipedia|fr:PCR quantitative|PCR quantitative}} :[[w:定量PCR|定量PCR]] :<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#réaction en chaîne par polymérase]]</span></span> === phase === {{Wikipedia|fr:Phase|Phase}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:phase#Français|phase]]  (''f'' )</span>  \fɑz\ , \faz\ </span> *:段階、局面、フェーズ   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#phase|phase]]''') *用例  <span style="font-family:Times New Roman;font-size:13pt;">la phase 2 du [[#déconfinement|déconfinement]]</span> <ref>[https://www.lexpress.fr/actualite/societe/sante/orange-ou-vert-decouvrez-la-nouvelle-carte-de-la-phase-2-du-deconfinement_2127009.html Orange ou vert découvrez la nouvelle carte de la phase 2 du déconfinement - L'Express] などを参照。</ref> *:封鎖解除の第二段階 === PPE === :<span style="font-family:Times New Roman;font-size:13pt;">''Voir''' [[#équipement de protection individuelle]] ou [[EPI]]</span> === prévention === === projection === ==== projection de gouttelettes ==== === propagation === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:propagation#Français|propagation]]  (''f'' )</span>  \pʁɔ.pa.ɡa.sjɔ̃\ </span> *:蔓延、伝播、増殖 *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#spread|spread]]''') ==== propagation du virus ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">(la) propagation</span> du virus</span> *:ウイルスの蔓延  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#spread ot the virus|spread ot the virus]]''') === protéger === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:protéger#Français|protéger]]</span> *: ~ de : ~から守る、保護する、防護する === quarantaine === [[画像:ICS Lima.svg|thumb|right|150px|<div style="text-align:center;">Le drapeau de signal de la '''[[w:fr:Quarantaine|quarantaine]]'''</div>]] *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:quarantaine#Français|quarantaine]]  (''f'' )</span>    \ka.ʁɑ̃.tɛn\ </span>: *:[[wikt:en:検疫|検疫]]、防疫隔離  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#quarantine|quarantine]]''') === réaction en chaîne par polymérase === {{Wikipedia|fr:Réaction en chaîne par polymérase|Réaction en chaîne par polymérase}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:réaction en chaîne par polymérase|réaction en chaîne par polymérase]]  (''f'' )</span>   \ʁe.ak.sjɔ̃ ɑ̃ ʃɛn paʁ pɔ.li.me.ʁaz\ </span>: *:[[w:ポリメラーゼ連鎖反応|ポリメラーゼ連鎖反応]] (<span style="font-family:Times New Roman;">[[#amplification en chaîne par polymérase]], [[#ACP]]</span>に同じ) *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#polymerase chain reaction|polymerase chain reaction]]''') === réinfection === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">réinfection (''f'' )</span>  \ʁe.ɛ̃.fɛk.sjɔ̃\ </span> *:再感染     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#reinfection|reinfection]]''') **用例 <span style="font-family:Times New Roman;font-size:13pt;">Selon l’OMS, les cas de “<span style="color:red;">réinfection</span>” au Covid-19 seraient des [[#faux positif|faux positif]]s</span> **:世界保健機関(OMS)によれば、COVID-19の 「<span style="color:red;">再感染</span>」 は 偽陽性であろうという。<ref name="siecle20200506"/><ref name="東洋経済20200510"/> === respirateur artificiel === {{Wikipedia|fr:Respirateur artificiel|Respirateur artificiel}} *:[[w:人工呼吸器|人工呼吸器]]     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#ventilator|ventilator]]''') === riposte === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:riposte#Français|riposte]] (''f'' )</span>  \ʁi.pɔst\ </span> *:対応、対処     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#response|response]]''') === risque === ==== risque de contamination ==== === RT-PCR === :[[w:逆転写ポリメラーゼ連鎖反応|逆転写ポリメラーゼ連鎖反応]]     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#RT-PCR|RT-PCR]]''', '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#reverse transcription polymerase chain reaction|reverse transcription polymerase chain reaction]]''') === rumeur === <!-- [[画像:Honoré Daumier 003.jpg|thumb|right|240px|<div style="text-align:center;">[[w:fr:Rumeur|Rumeur]]</div>]] --> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:rumeur#Français|rumeur]] (''f'' )</span>  \ʁy.mœʁ\ </span> : うわさ :⇒ [[#fausse rumeur]] : === SARS-CoV === {{Wikipedia|fr:SARS-CoV|SARS-CoV}} :<span style="font-family:Times New Roman;">''Voir'' &nbsp; <span style="font-size:13pt;">[[#coronavirus du syndrome respiratoire aigu sévère (SARS-CoV)]]</span></span> ==== SARS-CoV-2 ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:SARS-CoV-2#Français|SARS-CoV-2]] (''m'')</span>  \saʁs.kɔ.ve.dø\ </span> :<span style="font-family:Times New Roman;">''Voir'' &nbsp; <span style="font-size:13pt;">[[#coronavirus 2 du syndrome respiratoire aigu sévère (SARS-CoV-2)]]</span></span> ==== SARSr-CoV ==== :<span style="font-family:Times New Roman;">''Voir'' &nbsp; <span style="font-size:13pt;">[[#Coronavirus lié au syndrome respiratoire aigu sévère (SARSr-CoV)]]</span></span> === sensibilité === {{Wikipedia|fr:Sensibilité et spécificité|Sensibilité et spécificité}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:sensibilité#Français|sensibilité]]  (''f'' )</span>   \sɑ̃.si.bi.li.te\ </span> *:(検査の) 感度  <ref group="注釈" name="偽陰性と偽陽性"/> (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#sensitivity|sensitivity]]''') === sévère === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:sévère|sévère]]  \se.vɛʁ\ </span>:  *:(病気・症状の) '''重症の'''    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#severe|severe]]''') **'''重症'''   <span style="font-family:Times New Roman;font-size:13pt;"> le [[#symptôme sévère|symptôme sévère]] (les symptômes sévères)</span> **'''重症例'''  <span style="font-family:Times New Roman;font-size:13pt;"> le [[#cas sévère|cas sévère]] (les cas sévères)</span> === sévérité === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:sévérité#Français|sévérité]] (''f'' )</span>  \se.ve.ʁi.te\ </span>:  :(病気・症状の) '''重症度'''    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#severity|severity]]''') *'''重症の''' [[#sévère]] === SIDA === === spécificité === {{Wikipedia|fr:Sensibilité et spécificité|Sensibilité et spécificité}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:spécificité#Français|spécificité]]  (''f'' )</span>   \spe.si.fi.si.te\ </span> *:(検査の) 特異度  <ref group="注釈" name="偽陰性と偽陽性"/> (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#specificity|specificity]]''') === souche === {{Wikipedia|fr:Souche (biologie)|Souche (biologie)}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:souche#Français|souche]]  (''f'' )</span>   \suʃ\ </span> *:(細菌・ウイルスなどの) 変異株、変異体  <ref group="注釈" name="偽陰性と偽陽性"/> (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#strain|strain]]''') *参考記事 <span style="font-family:Times New Roman;font-size:13pt;">Mutation, variant, souche : le lexique pour comprendre les évolutions du coronavirus<ref name="parisien-2020-12-27"/></span> ==== souche virale ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:souche#Français|souche]] [[#viral|virale]]  (''f'' )</span>   \suʃ vi.ʁal\ </span> *:ウイルス株  <ref group="注釈" name="偽陰性と偽陽性"/> (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#viral strain|viral strain]]''') === SRAS === :<span style="font-family:Times New Roman;">''voir'' <span style="font-size:13pt;">[[#syndrome respiratoire aigu sévère (SRAS)]]</span></span> === SRAS-CoV === :<span style="font-family:Times New Roman;">''Voir'' &nbsp; <span style="font-size:13pt;">[[#coronavirus du syndrome respiratoire aigu sévère (SARS-CoV)]]</span></span> ==== SRAS-CoV-2 ==== :<span style="font-family:Times New Roman;">''Voir'' &nbsp; <span style="font-size:13pt;">[[#coronavirus 2 du syndrome respiratoire aigu sévère (SARS-CoV-2)]]</span></span> === sûreté biologique === {{Wikipedia|fr:Sûreté biologique|Sûreté biologique}} :バイオセーフティー(生物学的安全性) === surmortalité === {{Wikipedia|fr:Surmortalité|Surmortalité}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:surmortalité#Français|surmortalité]] (''m'')</span>  \syʁ.mɔʁ.ta.li.te\ </span>: 超過死亡率   (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#excess mortality|excess mortality]]''') === superinfecteur === {{Wikipedia|fr:Superinfecteur|Superinfecteur}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">super[[#infecteur|infecteur]] (''m'')</span>  \sy.pɛʁ ɛ̃.fɛk.tœʁ\ &nbsp;(??) </span>: *:[[w:スーパー・スプレッダー|スーパー・スプレッダー]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#superspreader|superspreader]]''') **<span style="font-family:Times New Roman;font-size:13pt;">''Voir aussi'' &nbsp; [[#super-propagateur]]</span> === super-propagateur === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:super-propagateur#Français|super-propagateur]] (''m'')</span>  \sy.pɛʁ.pʁɔ.pa.ɡa.tœʁ\ </span>: *:[[w:スーパー・スプレッダー|スーパー・スプレッダー]]    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#superspreader|superspreader]]''') **<span style="font-family:Times New Roman;font-size:13pt;">''Voir aussi'' &nbsp; [[#superinfecteur]]</span> === symptôme === {{Wikipedia|fr:Symptôme|Symptôme}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:symptôme#Français|symptôme]] (''m'')</span>  \sɛ̃p.tom\ </span>:  *:(病気の) '''症状'''    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#symptom|symptom]]''') *⇒ '''重症'''  <span style="font-family:Times New Roman;font-size:13pt;">le [[#symptôme sévère|symptôme sévère]]</span> ==== symptôme sévère ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[#symptôme|symptôme]] [[#sévère|sévère]] (''m'')</span> \sɛ̃p.tom se.vɛʁ\ </span>:  **<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">(les) [[#symptôme|symptôme]]s sévères</span></span> :(病気・症状の) '''重症の'''    (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#severe|severe]]''') *⇒ '''重症例'''   <span style="font-family:Times New Roman;font-size:13pt;"> le [[#cas sévère|cas sévère]]</span> === syndrome respiratoire aigu sévère (SRAS) === {{Wikipedia|fr:Syndrome respiratoire aigu sévère|Syndrome respiratoire aigu sévère}} === syndrome respiratoire du Moyen-Orient (MERS) === {{Wikipedia|fr:Syndrome respiratoire du Moyen-Orient|Syndrome respiratoire du Moyen-Orient}} === système immunitaire === {{Wikipedia|fr:Système immunitaire|Système immunitaire}} :[[w:免疫系|免疫系]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#immune system|immune system]]''') ==== système immunitaire adaptatif ==== {{Wikipedia|fr:Système immunitaire adaptatif|Système immunitaire adaptatif}} :獲得免疫系 (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#adaptive immune system|adaptive immune system]]''') ==== système immunitaire inné ==== {{Wikipedia|fr:Système immunitaire inné|Système immunitaire inné}} :自然免疫系 (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#innate immune system|innate immune system]]''') <!-- ==== {{Wikipedia|fr:|}} --> === TAN === '''test d'amplification des acides nucléiques''' au Canada :<span style="font-family:Times New Roman;">''Voir aussi'' <span style="font-size:13pt;">[[#ACP]], [[#PCR]], [[#amplification en chaîne par polymérase]]</span></span> === taux === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:taux#Français|taux]] (''m'')</span>  /to/ </span>: 割合 **<span style="font-family:Times New Roman;font-size:13pt;">[[#taux de létalité]]</span> (致死率) **<span style="font-family:Times New Roman;font-size:13pt;">[[#taux de mortalité]]</span> (死亡率) **<span style="font-family:Times New Roman;font-size:13pt;">[[#taux de reproduction de base]]</span> ([[w:基本再生産数|基本再生産数]]) ==== taux de létalité ==== {{Wikipedia|fr:Taux de létalité|Taux de létalité}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:taux de létalité#Français|taux de létalité]]  \to də le.ta.li.te\</span> : 致死率 (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#case fatality rate (CFR)|case fatality rate (CFR)]]''') ==== taux de mortalité ==== {{Wikipedia|fr:Taux de mortalité|Taux de mortalité}} *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:taux de mortalité#Français|taux de mortalité]]  \to də mɔʁ.ta.li.te\</span> : [[w:死亡率|死亡率]] (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#mortality rate|mortality rate]]''') ==== taux de reproduction de base ==== *<span style="font-family:Times New Roman;">''Voir'' [[#nombre de reproduction de base]]</span> ([[w:基本再生産数|基本再生産数]]) === télétravail === ==== télétravail à domicile ==== === test === ==== test diagnostique du SARS-CoV-2 ==== {{Wikipedia|fr:Test diagnostique du SARS-CoV-2|Test diagnostique du SARS-CoV-2}} === traitement === ==== traitement médical ==== {{Wikipedia|fr:Traitement (médecine)|Traitement (médecine)}} === transission === === urgences === {{Wikipedia|fr:Urgences|Urgences}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:urgences#Français|urgences]] (''f. pl.'')</span> :  \yʁ.ʒɑ̃s\  : </span> *:[[w:救急医療|救急医療]]  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#medical emergency|medical emergency]]''') === vaccin === {{Wikipedia|fr:Vaccin|Vaccin}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:vaccin#Français|vaccin]] (''m.'')</span> :   \vak.sɛ̃\   : </span>[[file:LL-Q150 (fra)-VictorDtmtc-vaccin.wav]] *:[[w:ワクチン|ワクチン]]  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#vaccine|vaccine]]''') === vaccination === === vague === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:vague#Nom_commun_3|vague]] (''f.'')</span> :  \vaɡ\    : </span> *:波 {| class="wikitable" |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:première#Français|première]] vague |\pʁə.mjɛʁ vaɡ\ |第一波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:deuxième vague|deuxième vague]] |\dø.zjɛm vaɡ\ |第二波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:troisième#Français|troisième]] vague |\tʁwɑ.zjɛm vaɡ\ |第三波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:quatrième#Français|quatrième]] vague |\ka.tʁi.jɛm vaɡ\ |第四波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:cinquième#Français|cinquième]] vague |\sɛ̃.kjɛm vaɡ\ |第五波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:sixième#Français|sixième]] vague |\si.zjɛm vaɡ\ |第六波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:septième#Français|septième]] vague |\sɛ.tjɛm vaɡ\ |第七波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:huitième#Français|huitième]] vague |\ɥi.tjɛm vaɡ\ |第八波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:neuvième#Français|neuvième]] vague |\nœ.vjɛm vaɡ\ |第九波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" |[[wikt:fr:dixième#Français|dixième]] vague |\di.zjɛm vaɡ\ |第十波 |- style="font-family:Times New Roman;font-size:13pt;" | style="background-color:#fdb;" | | | |} :  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#wave|wave]]'''</span>) :<span style="font-family:Times New Roman;font-size:13pt;">''voir aussi'' [[#deuxième vague]]</span> === variant === {{Wikipedia|fr:Variants du SARS-CoV-2|Variants du SARS-CoV-2}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:variant#Nom_commun|variant]] (''m'')</span> :   \va.ʁjɑ̃\  </span> :変異体(変異株、変異ウイルス)     (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#variant|variant]]'''</span>) ::(※「変異種」は誤用とされている<ref>[https://www.kansensho.or.jp/modules/news/index.php?content_id=221 【重要】変異「種」の誤用について](日本感染症学会)</ref>) *参考記事 <span style="font-family:Times New Roman;font-size:13pt;">Mutation, variant, souche : le lexique pour comprendre les évolutions du coronavirus<ref name="parisien-2020-12-27"/></span> === variant préoccupant === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:variant#Nom_commun|variant]](s) [[wikt:fr:préoccupant|préoccupant]](s)  (''m'')</span> <ref name="oms-voc">[https://www.who.int/fr/activities/tracking-SARS-CoV-2-variants Suivi des variants du SARS-CoV-2](OMS) 等を参照。</ref><ref name="voc">[https://www.santepubliquefrance.fr/dossiers/coronavirus-covid-19/coronavirus-circulation-des-variants-du-sars-cov-2 Coronavirus : circulation des variants du SARS-CoV-2] 等を参照。</ref><ref name="ca-voc">[https://www.gov.mb.ca/covid19/fundamentals/print,variants.fr.html Province du Manitoba | Variants préoccupants du virus responsable de la COVID-19] 等を参照。</ref>:   \va.ʁjɑ̃.pʁe.ɔ.ky.pɑ̃\  </span> *:[[w:懸念される変異株|懸念される変異株]] (VOC) *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#variant of concern (VOC)|variant of concern (VOC)]]'''</span>) === variant à suivre === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:variant#Nom_commun|variant]]</span> [[wikt:fr:à suivre|à suivre]] <span style="background-color:#bdf;">(''m'')</span> <ref name="oms-voc"/><ref name="voc"/><ref name="ca-voc"/>:   \va.ʁjɑ̃ a sɥivʁ\   </span> *:[[w:懸念される変異株#注目すべき変異株|注目すべき変異株]] (VOI) *:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#variant of interest (VOI)|variant of interest (VOI)]]'''</span>) === vecteur === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:vecteur#Français|vecteur]] (''m'')</span> :  /vɛk.tœʁ/  : Organisme qui ne provoque pas lui-même une maladie mais qui disperse l’infection en transportant les agents pathogènes d’un hôte à l'autre</span> **用例 <span style="font-family:Times New Roman;font-size:13pt;">Les enfants, mauvais <span style="color:red;">vecteur</span>s du [[#coronavirus (CoV)|coronavirus]] ? (Le Figaro)</span><ref>フィガロ紙の2020年5月4日記事[https://www.lefigaro.fr/actualite-france/les-enfants-mauvais-vecteurs-du-coronavirus-20200504]を参照。</ref> *:子どもたちは、コロナウイルスの悪しき<span style="color:red;">媒介者</span>なのか?(フィガロ紙、2020年5月4日記事) === ventilateur === :<span style="font-family:Times New Roman;font-size:13pt;">''Voir''' [[#respirateur artificiel]]</span> === VIH === === viral === *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:viral#Français|viral]] (''m.'')</span> :  \vi.ʁal\  : Relatif aux [[#virus]].</span> *:ウイルスの、ウイルスに関する    *: (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#viral|viral]]''') ==== virale ==== *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:virale#Français|virale]] (''f.'')</span> :  \vi.ʁal\  : Féminin singulier de [[#viral]].</span> *:<span style="font-family:Times New Roman;font-size:13pt;">[[#viral]]</span> の女性形 === virulence === {{Wikipedia|fr:Virulence|Virulence}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;">[[wikt:fr:virulence|virulence]] (''f.'')</span> :  \vi.ʁy.lɑ̃s\   : </span> *:毒性 *: (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#virulence|virulence]]''') === virulent === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:virulent#Français|virulent]], -e  :  \vi.ʁy.lɑ̃\, \vi.ʁy.lɑ̃t\ </span> *:毒性のある、発病性のある *: (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#virulent|virulent]]''') === virus === ==== virus à ARN ==== {{Wikipedia|fr:Virus à ARN|Virus à ARN}} :[[w:RNAウイルス|RNAウイルス]] <span style="font-family:Times New Roman;font-size:13pt;">''Voir aussi'' [[#ARN]]</span> ==== virus de la grippe ==== {{Wikipedia|fr:Virus de la grippe|Virus de la grippe}} === vivre === *<span style="font-family:Times New Roman;font-size:13pt;">[[wikt:fr:vivre#Français|vivre]] (''v'') :  \vivʁ\</span>   : 生きる、生活する、暮らす **用例 <span style="font-family:Times New Roman;font-size:13pt;">[[#coronavirus (CoV)|Coronavirus]] - Philippe à l'Assemblée : '''"Nous allons devoir <span style="color:red;">vivre</span> avec le virus"'''</span><ref>[[w:France 24|フランス24]]2020年4月28日記事 [https://www.france24.com/fr/video/20200428-coronavirus-philippe-%C3%A0-l-assembl%C3%A9e-nous-allons-devoir-vivre-avec-le-virus Coronavirus] - [[w:fr:Édouard Philippe|Philippe]] à l'Assemblée Nous allons devoir vivre avec le virus - France 24などを参照。</ref> **:コロナウイルス:[[w:エドゥアール・フィリップ|フィリップ(首相)]]は議会で''' 「私たちは、ウイルスとともに<span style="color:red;">生き</span>なければなりません」''' <div style="background-color:brown;"> === Black Lives Matter === {{Wikipedia|fr:Black Lives Matter|Black Lives Matter}} ==== Manifestations et émeutes de mai-juin 2020 aux États-Unis ==== {| |- style="background-color:#ddd;" | style="vertical-align:top;text-align:right;" | <br>[[w:fr:Mort de George Floyd|Mort de George Floyd]]<br>[[w:ジョージ・フロイドの死|ジョージ・フロイドの死]] | style="vertical-align:top;text-align:left;" |[[画像:Protest against police violence - Justice for George Floyd, May 26, 2020 11.jpg|330px]]<br>[[w:fr:Manifestations et émeutes de mai-juin 2020 aux États-Unis|Manifestations et émeutes de mai-juin 2020<br> aux États-Unis]] (2020年5-6月 米国抗議と暴動)<br>[[w:ジョージ・フロイド抗議運動|ジョージ・フロイド抗議運動]] |} :(⇒[[画像:Flag of the United States.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#Black Lives Matter​|Black Lives Matter​]]''') </div> <br> <div style="background-color:lightgray;"> === Crise économique du Covid-19 === {{Wikipedia|fr:Crise économique du Covid-19|Crise économique du Covid-19}} コロナウイルス経済危機(大不況) {| |- style="background-color:#ddd;" | style="vertical-align:top;text-align:right;" |[[画像:Stock-indices-2020crash.svg|300px]]<br>[[w:fr:Krach boursier de 2020|Krach boursier de 2020]]<br>[[w:2020年の株価大暴落|2020年の株価大暴落]] | style="vertical-align:top;text-align:left;" |[[画像:A nearly empty flight from PEK to LAX amid the COVID-19 pandemic 1.jpg|300px]]<br> Un vol presque vide<br> (ほとんど空席のフライト) |} : (⇒[[画像:Flag of France.svg|border|25px]] <span style="font-family:Times New Roman;font-size:13pt;">'''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#Coronavirus recession|Coronavirus recession​]]'''</span>) </div> <br> <div style="background-color:khaki;"> === Invasion de criquets de 2019-2020 === {{Wikipedia|fr:Invasion de criquets de 2019-2020 en Afrique de l'Est|Invasion de criquets de 2019-2020 en Afrique de l'Est}} {{Wikipedia|fr:Criquet pèlerin|Criquet pèlerin}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:criquet#Français|criquet]] [[wikt:fr:pèlerin|pèlerin]]  (''m'')</span>  \kʁi.kɛ pɛl.ʁɛ̃\ </span>: {| |- | style="vertical-align:top;text-align:right;" |[[画像:Schistocerca gregaria - Wüstenheuschrecke.jpg|300px]]<br>[[w:fr:Criquet pèlerin|Criquet pèlerin]] | style="vertical-align:top;text-align:left;" |[[画像:Schistocerca gregaria L1 hoppers.jpg|300px]]<br>[[w:サバクトビバッタ|サバクトビバッタ]] |} :(⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#2019–20 locust infestation|2019–20 locust infestation]]''') </div> <!-- {{Wikipedia|fr:Anticorps|Anticorps}} {{Wiktionary|fr:Thésaurus:pandémie/français|Thésaurus:pandémie/}} *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;">[[wikt:fr:anticorps#Français|anticorps]]  (''m'')</span>  \ɑ̃.ti.kɔʁ\ </span>:  (⇒[[画像:Flag of the United Kingdom.svg|border|25px]] '''[[トランスリンガル図鑑/新型コロナウイルス感染症/英語#|]]''') *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;font-size:13pt;"></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;"> </span></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;"> </span></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#fdb;"> </span></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;"> </span></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;"> </span></span> *<span style="font-family:Times New Roman;font-size:13pt;"><span style="background-color:#bdf;"> </span></span> --> == 脚注 == === 注釈 === {{Reflist| group="注釈"}} === 出典等 === {{Reflist}} == 関連項目 == *[[トランスリンガル図鑑]] == 関連記事 == *ウィクショナリー仏語版 **<span style="font-family:Times New Roman;font-size:15pt;">[[wikt:fr:Thésaurus:pandémie/français]]</span> <span style="font-family:Times New Roman;font-size:13pt;"></span> == 外部リンク == === WHO === *[ ] - 世界保健機関 (WHO) === Canada.ca (Gouvernement du Canada) === *[[画像:Flag of Canada.svg|border|25px]] [https://www.canada.ca/fr.html www.canada.ca/fr.html] - Canada.ca : カナダ政府の電子ポータル(仏語版) **<span style="background-color:#ffc;">[https://www.canada.ca/fr/sante-publique/services/maladies/maladie-coronavirus-covid-19.html www.canada.ca/fr/sante-publique/services/maladies/maladie-coronavirus-covid-19.html] :<br> <span style="font-size:20pt;">Maladie à coronavirus (COVID-19) mise à jour sur l’éclosion, symptômes, prévention, voyage, préparations - Canada.ca</span></span> **:コロナウイルス感染症(COVID-19) 関連の各種情報 ***[https://www.canada.ca/fr/sante-publique/services/maladies/2019-nouveau-coronavirus.html?topic=tilelink ?topic=tilelink] - Mise à jour sur l’éclosion - アウトブレイク・アップデート ***[https://www.canada.ca/fr/sante-publique/services/maladies/2019-nouveau-coronavirus/symptomes.html /symptomes.html] - Symptômes et traitement : 症状と治療 ***[https://www.canada.ca/fr/sante-publique/services/maladies/2019-nouveau-coronavirus/prevention-risques.html /prevention-risques.html] - Prévention et risques : 予防とリスク === Info Coronavirus COVID-19 : Gouvernement.fr === *<span style="font-family:Times New Roman;font-size:13pt;">[https://www.gouvernement.fr/info-coronavirus www.gouvernement.fr/info-coronavirus] - Info Coronavirus COVID-19 Gouvernement.fr</span> **<span style="font-family:Times New Roman;font-size:13pt;">[https://www.gouvernement.fr/info-coronavirus/comprendre-le-covid-19 /comprendre-le-covid-19] - Info Coronavirus COVID-19 - Comprendre le covid-19 Gouvernement.fr</span> === Institut Pasteur === *[https://www.pasteur.fr/ www.pasteur.fr/]] - [[w:fr:Institut Pasteur|Institut Pasteur]] Pour la recherche, pour la santé, pour demain *:[[w:パスツール研究所|パストゥール研究所]]:「近代細菌学の祖」と呼ばれる[[w:ルイ・パスツール|ルイ・パストゥール]]が開設した民間研究機関で、世界各地に拠点を持つ。仏語、 **<span style="background-color:#ffc;">[https://www.pasteur.fr/fr/centre-medical/fiches-maladies/maladie-covid-19-nouveau-coronavirus www.pasteur.fr/fr/centre-medical/fiches-maladies/maladie-covid-19-nouveau-coronavirus] - <span style="font-size:15pt;">Maladie Covid-19 (nouveau coronavirus)</span></span> **:パストゥール研究所による新型コロナウイルス感染症の解説ページ(動画解説付き) [[Category:トランスリンガル図鑑|C]] [[カテゴリ:新型コロナウイルス感染症]] jvu7cdo7yqdwi8xlbacuzu4pmtoyfl1 利用者:Kwawe 2 34770 304608 304094 2026-10-11T06:46:36Z Kwawe 68789 /* 高校生に向けてメッセージ */ 304608 wikitext text/x-wiki ※2022年6月にwikibooksに登録しております。 == Wikibooksの記述では == # 中学生高校生向けの新規執筆・改定執筆のWikibooksは敬体で記述しています。新課程の自然科学ほぼ全般(物理・生物・地学・理数探究基礎)、社会科学(公民)、人文科学全般、保健体育・家庭科を記述しています。 # 本文記述は、冗長表現をなくしています。詳しくは、国語表現の「[[高等学校国語表現/わかりやすい文を書く|わかりやすい文を書く]]」を参照してください。 # 大人向け法律学(刑法など)のWikibooksは、常体で記述しています。 # 大人向け経済原論(ミクロ経済学など)のWikibooksは、敬体で記述しています。 == 教科書 == Wikibooksの教科書目録の作成などを新課程版に更新しています。 当方、高等学校の旧課程教科書は数学・自然科学(物理・化学・生物・地学)・商業の一部・福祉の一部・公民・国語表現・人文科学(地理・歴史)の教科書を持参しています。 2023年からの新課程用は公共、歴史総合・日本史探究・世界史探究、家庭総合、理数探究基礎、生物全5冊、政治経済、数学[第一、数研の最新シリーズ]の教科書を持参しています。 ※基本、私の執筆するページは資料出所と出典を必ず掲載します。たとえそれが文部科学省の教科書だとしてもです。 == wikibooks執筆担当科目 ==  主に、高校生の教科書を中心に執筆していますが、中学生の実技教科、一般向けの経済原論も執筆しています。  執筆に時間がかかる科目「物理」「生物」「地歴の探究科目」「公共」は、更新頻度が減ります。 * [[高等学校理科 物理基礎|高等学校 物理基礎]]     [全般] * [[高等学校 物理|高等学校物理]]        [全般] * [[高等学校 生物基礎]]     [全般] * [[高等学校 生物]]       [全般] * [[高等学校 地学基礎]]     [全般] * [[高等学校 地学]]       [全般] * [[高等学校 理数探究基礎]]   [全般] * [[高等学校国語表現]]      [全般] * [[高等学校地理探究]]      [全般] * [[高等学校公共]]        [全般] * [[高等学校倫理]]        [全般] * [[ミクロ経済学]]        [全般] * [[高等学校世界史探究]]     [全般] * [[高等学校歴史総合]]      [全般](過去執筆の全てを見直し・本文大修正) * [[高等学校家庭総合]]      [全般] * [[中学校音楽]]         [全般] * [[中学校家庭]]         [全般](衣生活と食生活は完成時期不明。) * [[中学校保健体育]]       [全般] * [[高等学校保健体育]]      [座学編・実技編両方全般] * [[高等学校日本史探究]]     [全般] 今後、順次執筆科目は増加予定です。 また、時期は未定ですが、看護とかも執筆していきたいと思います。(2023年2月04日追記) == 高校生に向けてメッセージ ==  私達は日本人ですから、日本語の文章でまず意味を理解しないと文字式や数式・公式も当然理解出来ません。そして、日本語の語彙を覚えないと当然国語の読解問題の記述問題も解けません。以上、私、当時元文系の高校生から見た視点です(大学卒業後、現在社会人)。あくまで、文字式や数式はイメージ的には図形と似たような感じで、これらをイラスト化にしているに過ぎません。 [現在執筆中の内容] ★日本史探究 * 律令体制再編期の政治と社会Ⅱ(新規執筆) * 新たな世紀の日本へⅡ(事後処理) * 新たな世紀の日本へⅣ(新規執筆) ★地学 * [[高等学校 地学/生命の進化|生命の進化]](新規執筆) ★生物 * [[高等学校 生物/個体群とその変動|個体群とその変動]] ★高等学校公共 * [[高等学校公共/国会の役割と仕組みⅡ|国会の役割と仕組みⅡ]](新規執筆) == 過去執筆の事後処理予定[見直し、本文大幅修正] == ★歴史総合 ★生物・生物基礎 ★地学・地学基礎 ★保健体育 ★家庭科 == 2026年執筆予定の内容 == 日本史探究:古代・近現代(一部) 科学と人間生活:化学分野の一部 == 2027年執筆予定の内容 == 公共:統治編全て(国会・内閣・裁判所・地方自治)と社会保障制度 生物基礎・生物:全部 地学基礎・地学:全部 == リンク集 == * https://jawikibooks.wikiscan.org/users iwghbhh3soqkdex31ynxij8hdum0hfg Wikibooks:GUS2Wiki 4 35248 304574 304240 2026-10-10T22:05:52Z Alexis Jazz 56315 Updating gadget usage statistics from [[Special:GadgetUsage]] ([[phab:T121049]]) 304574 wikitext text/x-wiki {{#ifexist:Project:GUS2Wiki/top|{{/top}}|This page provides a historical record of [[Special:GadgetUsage]] through its page history. To get the data in CSV format, see wikitext. To customize this message or add categories, create [[/top]].}} 以下のデータは 2026-10-10T07:09:45Z に最終更新されたキャッシュです。 {| class="sortable wikitable" ! ガジェット !! data-sort-type="number" | 利用者の数 !! data-sort-type="number" | 活動中の利用者 |- |Blackskin || 10 || 0 |- |Navigation popups || 93 || 0 |- |UTCLiveClock || 51 || 0 |- |edittop || 62 || 2 |- |exlinks || 58 || 1 |- |removeAccessKeys || 10 || 0 |- |wikEd || 51 || 0 |} * [[特別:GadgetUsage]] * [[m:Meta:GUS2Wiki/Script|GUS2Wiki]] <!-- data in CSV format: Blackskin,10,0 Navigation popups,93,0 UTCLiveClock,51,0 edittop,62,2 exlinks,58,1 removeAccessKeys,10,0 wikEd,51,0 --> mf9xxy1ri7ptftcnhyysh3svkmvbtb9 高等学校日本史探究 0 36598 304562 304100 2026-10-10T15:13:40Z Kwawe 68789 /* 第4章 古代の国家・社会の変容 */ 304562 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>高等学校日本史探究  高等学校日本史探究のページです。{{進捗状況}} 本ページの目次と項目の配列は、実教出版株式会社の新課程教科書「[https://www.jikkyo.co.jp/book/detail/23010423 日本史探究]」(日探702・日探007-901)に合わせて作成しています。文章の配列も原則上記教科書会社さんに従いました。学習指導要領に定められた日本史探究の標準単位数は'''3単位です。''' ※本ページは大学の二次試験まで対応させるため、日本史探究の完成時期は未定です。当面の間は日本史Bを参照して下さい。 == 第1部 原始・古代の日本と東アジア == INTRODUCTION === 第1章 日本文化のあけぼの === # [[高等学校日本史探究/日本列島最古の文化Ⅰ|日本列島最古の文化Ⅰ]]{{進捗|100%|2024-09-21}}(人類の誕生と日本列島への居住) # [[高等学校日本史探究/日本列島最古の文化Ⅱ|日本列島最古の文化Ⅱ]]{{進捗|100%|2024-10-01}}(日本の旧石器時代) # [[高等学校日本史探究/縄文時代の社会と文化|縄文時代の社会と文化]]{{進捗|100%|2026-09-27}}(縄文文化の成立~縄文社会と縄文人) # 弥生時代の社会と文化Ⅰ{{進捗|00%|2023-11-11}} # 弥生時代の社会と文化Ⅱ{{進捗|00%|2023-11-11}} === 第2章 ヤマト政権の成立と古墳文化 === # 小国の分立と邪馬台国{{進捗|00%|2023-11-11}} # 古墳の出現とヤマト政権の成立{{進捗|00%|2023-11-11}} # ヤマト政権の展開と統治の進展{{進捗|00%|2023-11-11}} # 古墳時代の生活と文化{{進捗|00%|2023-11-11}} === 第3章 律令国家の形成 === # [[高等学校日本史探究/古代国家の形成Ⅰ|古代国家の形成Ⅰ]]{{進捗|100%|2024-11-18}}(6世紀の朝鮮半島と倭~7世紀の東アジアと倭国) # [[高等学校日本史探究/古代国家の形成Ⅱ|古代国家の形成Ⅱ]]{{進捗|100%|2025-02-01}}(大化の改新~東北遠征と白村江の戦い) # [[高等学校日本史探究/古代国家の形成Ⅲ|古代国家の形成Ⅲ]]{{進捗|100%|2025-02-11}}(近江朝廷と壬申の乱~天武・持統期の政治改革) # [[高等学校日本史探究/飛鳥文化・白鳳文化|飛鳥文化・白鳳文化]]{{進捗|100%|2024-11-06}} # [[高等学校日本史探究/律令制度|律令制度]]{{進捗|100%|2025-06-03}}(大宝律令の官制~土地・人民の支配制度) # [[高等学校日本史探究/奈良時代の政治Ⅰ|奈良時代の政治Ⅰ]]{{進捗|100%|2025-07-21}}(遣唐使派遣と平城京遷都) # [[高等学校日本史探究/奈良時代の政治Ⅱ|奈良時代の政治Ⅱ]]{{進捗|100%|2025-11-22}}(奈良時代初期の政策~度重なる遷都と鎮護国家の仏教) # [[高等学校日本史探究/奈良時代の政治Ⅲ|奈良時代の政治Ⅲ]]{{進捗|100%|2025-12-21}}(公地公民制の修正~奈良時代後半の政争) # 天平文化 STEP UP 1 [[高等学校日本史探究/奈良時代の人々の暮らし|奈良時代の人々の暮らし]]{{進捗|100%|2026-04-09}}(奈良時代の貴族生活~生活文化の発展と庶民の苦難) === 第4章 古代の国家・社会の変容 === # [[高等学校日本史探究/律令体制再編期の政治と社会Ⅰ|律令体制再編期の政治と社会Ⅰ]]{{進捗|100%|2026-10-11}}(平安京遷都と東北経営) # 律令体制再編期の政治と社会Ⅱ{{進捗|00%|2026-09-6}}(律令政治の再編成~法・儀式の整備と教育) # 律令体制再編期の政治と社会Ⅲ{{進捗|00%|2026-09-5}}(密教の隆盛~弘仁・貞観文化) # 摂関政治の成立と支配体制の転換 # 国風文化 == 第2部 中世の日本と世界 == INTRODUCTION === 第1章 荘園公領制の成立と院政 === ※荘園公領制の成立と院政は2027年4月に記述します。 * 荘園公領制の成立と院政Ⅰ * 荘園公領制の成立と院政Ⅱ * 荘園公領制の成立と院政Ⅲ * 荘園公領制の成立と院政Ⅳ === 第2章 中世の国家・社会の展開 === # 鎌倉幕府の成立と朝廷 # 中世に生きる人々 # 蒙古襲来と幕府の衰退 # 鎌倉文化 === 第3章 中世の国家・社会の変容 === # 南北朝の動乱 # 室町幕府の政治と外交 # 室町社会の展開と応仁の乱 # 室町文化 # [[高等学校日本史探究/戦国大名の分国経営Ⅰ|戦国大名の分国経営Ⅰ]]{{進捗|100%|2025-02-15}}(戦国時代の特質~戦国の争乱) # 戦国大名の分国経営Ⅱ{{進捗|00%|2023-00-00}}(分国経営) # 戦国大名の分国経営Ⅲ{{進捗|00%|2025-02-15}}(都市の発達と町衆~経済の混乱) STEP UP 2 東アジアのなかのアイヌ文化・琉球文化 STEP UP 3 女性と仏教 == 第3部 近世の日本と世界 == INTRODUCTION === 第1章 東アジア世界の変容と天下統一 === # 織豊政権 # 天下統一の完成 # 近世成立期の文化 歴史資料と近世の展望 === 第2章 幕藩体制の成立と展開 === # 幕藩体制の成立 # 貿易の統制と対外関係 # 近世社会のしくみ # 幕府政治の展開 # 経済の発展 # 元禄文化と学芸の発展 STEP UP 4 近世の遊郭 === 第3章 近世の国家・社会の変容 === # 幕藩体制の動揺と幕政の改革 # 欧米列強の接近と天保の改革 # 近世文化の成熟と変容 STEP UP 5 百姓一揆と義民物語 == 第4部 近現代の地域・日本と世界 == INTRODUCTION(近代) === 第1章 開国から倒幕へ === 歴史資料と近代の展望 === 第2章 明治維新 === # 明治維新 # 文明開化 === 第3章 近代国家の形成 === # 立憲国家への道 # 議会政治の展開と日清・日露戦争 # 産業革命と社会の変化 # 近代文化の形成と展開 STEP UP 6 日露戦争のアジアへの影響 === 第4章 両大戦間の日本 === # 第一次世界大戦 # 政党政治の展開 # 市民文化の展開 STEP UP 7 近代日本の「食」と米 === 第5章 十五年戦争と日本 === # 満洲事変 # 日中戦争 # アジア・太平洋戦争(太平洋戦争) INTRODUCTION(現代) === 第6章 戦後日本の形成 === # 占領と民主改革 # 独立と日米安保体制の形成 # 高度経済成長下の日本 STEP UP 8 エネルギー革命 === 第7章 グローバル化のなかの現代日本 === # 「国際化」する経済大国Ⅰ{{進捗|00%|2023-00-00}}(ドル=ショックと石油危機~安定成長への転換まで) # 「国際化」する経済大国Ⅱ{{進捗|00%|2023-00-00}}(経済大国への道と国際化の時代) # 「国際化」する経済大国Ⅲ{{進捗|00%|2023-00-00}}(貿易摩擦とバブル経済~「豊かさ」と社会・生活の変容まで) # [[高等学校日本史探究/新たな世紀の日本へⅠ|新たな世紀の日本へⅠ]]{{進捗|100%|2026-04-10}}(冷戦の終結とグローバル化~湾岸戦争と平和維持活動まで) # [[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]{{進捗|25%|2026-09-24}}(政界再編と55年体制の終結~行政改革と日米安保の変化まで) # [[高等学校日本史探究/新たな世紀の日本へⅢ|新たな世紀の日本へⅢ]]{{進捗|100%|2026-09-23}}(「構造改革」と対テロ戦争~憲法改正論と政権交代まで) # [[高等学校日本史探究/新たな世紀の日本へⅣ|新たな世紀の日本へⅣ]]{{進捗|25%|2026-09-24}}(新しい世界を目指して~平成時代・令和時代の文化史・科学史まで) 【STEP UP 9】[[高等学校日本史探究/多文化共生|多文化共生]]{{進捗|100%|2024-09-24}} 現代の日本の課題の探究 == 読書案内・学習方法 == * [[高等学校日本史探究/資料出所・読書案内|資料出所・読書案内]] * [[学習方法/高校日本史|高校日本史学習方法]]{{進捗|100%|2026-04-29}}(新試験対応) [[カテゴリ:高等学校日本史|探]] mn2fkb7cm9nv71lm6pf12fni1doclnq 304589 304562 2026-10-11T04:42:08Z Kwawe 68789 /* 第4章 古代の国家・社会の変容 */ 304589 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>高等学校日本史探究  高等学校日本史探究のページです。{{進捗状況}} 本ページの目次と項目の配列は、実教出版株式会社の新課程教科書「[https://www.jikkyo.co.jp/book/detail/23010423 日本史探究]」(日探702・日探007-901)に合わせて作成しています。文章の配列も原則上記教科書会社さんに従いました。学習指導要領に定められた日本史探究の標準単位数は'''3単位です。''' ※本ページは大学の二次試験まで対応させるため、日本史探究の完成時期は未定です。当面の間は日本史Bを参照して下さい。 == 第1部 原始・古代の日本と東アジア == INTRODUCTION === 第1章 日本文化のあけぼの === # [[高等学校日本史探究/日本列島最古の文化Ⅰ|日本列島最古の文化Ⅰ]]{{進捗|100%|2024-09-21}}(人類の誕生と日本列島への居住) # [[高等学校日本史探究/日本列島最古の文化Ⅱ|日本列島最古の文化Ⅱ]]{{進捗|100%|2024-10-01}}(日本の旧石器時代) # [[高等学校日本史探究/縄文時代の社会と文化|縄文時代の社会と文化]]{{進捗|100%|2026-09-27}}(縄文文化の成立~縄文社会と縄文人) # 弥生時代の社会と文化Ⅰ{{進捗|00%|2023-11-11}} # 弥生時代の社会と文化Ⅱ{{進捗|00%|2023-11-11}} === 第2章 ヤマト政権の成立と古墳文化 === # 小国の分立と邪馬台国{{進捗|00%|2023-11-11}} # 古墳の出現とヤマト政権の成立{{進捗|00%|2023-11-11}} # ヤマト政権の展開と統治の進展{{進捗|00%|2023-11-11}} # 古墳時代の生活と文化{{進捗|00%|2023-11-11}} === 第3章 律令国家の形成 === # [[高等学校日本史探究/古代国家の形成Ⅰ|古代国家の形成Ⅰ]]{{進捗|100%|2024-11-18}}(6世紀の朝鮮半島と倭~7世紀の東アジアと倭国) # [[高等学校日本史探究/古代国家の形成Ⅱ|古代国家の形成Ⅱ]]{{進捗|100%|2025-02-01}}(大化の改新~東北遠征と白村江の戦い) # [[高等学校日本史探究/古代国家の形成Ⅲ|古代国家の形成Ⅲ]]{{進捗|100%|2025-02-11}}(近江朝廷と壬申の乱~天武・持統期の政治改革) # [[高等学校日本史探究/飛鳥文化・白鳳文化|飛鳥文化・白鳳文化]]{{進捗|100%|2024-11-06}} # [[高等学校日本史探究/律令制度|律令制度]]{{進捗|100%|2025-06-03}}(大宝律令の官制~土地・人民の支配制度) # [[高等学校日本史探究/奈良時代の政治Ⅰ|奈良時代の政治Ⅰ]]{{進捗|100%|2025-07-21}}(遣唐使派遣と平城京遷都) # [[高等学校日本史探究/奈良時代の政治Ⅱ|奈良時代の政治Ⅱ]]{{進捗|100%|2025-11-22}}(奈良時代初期の政策~度重なる遷都と鎮護国家の仏教) # [[高等学校日本史探究/奈良時代の政治Ⅲ|奈良時代の政治Ⅲ]]{{進捗|100%|2025-12-21}}(公地公民制の修正~奈良時代後半の政争) # 天平文化 STEP UP 1 [[高等学校日本史探究/奈良時代の人々の暮らし|奈良時代の人々の暮らし]]{{進捗|100%|2026-04-09}}(奈良時代の貴族生活~生活文化の発展と庶民の苦難) === 第4章 古代の国家・社会の変容 === # [[高等学校日本史探究/律令体制再編期の政治と社会Ⅰ|律令体制再編期の政治と社会Ⅰ]]{{進捗|100%|2026-10-11}}(平安京遷都と東北経営) # [[高等学校日本史探究/律令体制再編期の政治と社会Ⅱ|律令体制再編期の政治と社会Ⅱ]]{{進捗|00%|2026-09-6}}(律令政治の再編成~法・儀式の整備と教育) # 律令体制再編期の政治と社会Ⅲ{{進捗|00%|2026-09-5}}(密教の隆盛~弘仁・貞観文化) # 摂関政治の成立と支配体制の転換 # 国風文化 == 第2部 中世の日本と世界 == INTRODUCTION === 第1章 荘園公領制の成立と院政 === ※荘園公領制の成立と院政は2027年4月に記述します。 * 荘園公領制の成立と院政Ⅰ * 荘園公領制の成立と院政Ⅱ * 荘園公領制の成立と院政Ⅲ * 荘園公領制の成立と院政Ⅳ === 第2章 中世の国家・社会の展開 === # 鎌倉幕府の成立と朝廷 # 中世に生きる人々 # 蒙古襲来と幕府の衰退 # 鎌倉文化 === 第3章 中世の国家・社会の変容 === # 南北朝の動乱 # 室町幕府の政治と外交 # 室町社会の展開と応仁の乱 # 室町文化 # [[高等学校日本史探究/戦国大名の分国経営Ⅰ|戦国大名の分国経営Ⅰ]]{{進捗|100%|2025-02-15}}(戦国時代の特質~戦国の争乱) # 戦国大名の分国経営Ⅱ{{進捗|00%|2023-00-00}}(分国経営) # 戦国大名の分国経営Ⅲ{{進捗|00%|2025-02-15}}(都市の発達と町衆~経済の混乱) STEP UP 2 東アジアのなかのアイヌ文化・琉球文化 STEP UP 3 女性と仏教 == 第3部 近世の日本と世界 == INTRODUCTION === 第1章 東アジア世界の変容と天下統一 === # 織豊政権 # 天下統一の完成 # 近世成立期の文化 歴史資料と近世の展望 === 第2章 幕藩体制の成立と展開 === # 幕藩体制の成立 # 貿易の統制と対外関係 # 近世社会のしくみ # 幕府政治の展開 # 経済の発展 # 元禄文化と学芸の発展 STEP UP 4 近世の遊郭 === 第3章 近世の国家・社会の変容 === # 幕藩体制の動揺と幕政の改革 # 欧米列強の接近と天保の改革 # 近世文化の成熟と変容 STEP UP 5 百姓一揆と義民物語 == 第4部 近現代の地域・日本と世界 == INTRODUCTION(近代) === 第1章 開国から倒幕へ === 歴史資料と近代の展望 === 第2章 明治維新 === # 明治維新 # 文明開化 === 第3章 近代国家の形成 === # 立憲国家への道 # 議会政治の展開と日清・日露戦争 # 産業革命と社会の変化 # 近代文化の形成と展開 STEP UP 6 日露戦争のアジアへの影響 === 第4章 両大戦間の日本 === # 第一次世界大戦 # 政党政治の展開 # 市民文化の展開 STEP UP 7 近代日本の「食」と米 === 第5章 十五年戦争と日本 === # 満洲事変 # 日中戦争 # アジア・太平洋戦争(太平洋戦争) INTRODUCTION(現代) === 第6章 戦後日本の形成 === # 占領と民主改革 # 独立と日米安保体制の形成 # 高度経済成長下の日本 STEP UP 8 エネルギー革命 === 第7章 グローバル化のなかの現代日本 === # 「国際化」する経済大国Ⅰ{{進捗|00%|2023-00-00}}(ドル=ショックと石油危機~安定成長への転換まで) # 「国際化」する経済大国Ⅱ{{進捗|00%|2023-00-00}}(経済大国への道と国際化の時代) # 「国際化」する経済大国Ⅲ{{進捗|00%|2023-00-00}}(貿易摩擦とバブル経済~「豊かさ」と社会・生活の変容まで) # [[高等学校日本史探究/新たな世紀の日本へⅠ|新たな世紀の日本へⅠ]]{{進捗|100%|2026-04-10}}(冷戦の終結とグローバル化~湾岸戦争と平和維持活動まで) # [[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]{{進捗|25%|2026-09-24}}(政界再編と55年体制の終結~行政改革と日米安保の変化まで) # [[高等学校日本史探究/新たな世紀の日本へⅢ|新たな世紀の日本へⅢ]]{{進捗|100%|2026-09-23}}(「構造改革」と対テロ戦争~憲法改正論と政権交代まで) # [[高等学校日本史探究/新たな世紀の日本へⅣ|新たな世紀の日本へⅣ]]{{進捗|25%|2026-09-24}}(新しい世界を目指して~平成時代・令和時代の文化史・科学史まで) 【STEP UP 9】[[高等学校日本史探究/多文化共生|多文化共生]]{{進捗|100%|2024-09-24}} 現代の日本の課題の探究 == 読書案内・学習方法 == * [[高等学校日本史探究/資料出所・読書案内|資料出所・読書案内]] * [[学習方法/高校日本史|高校日本史学習方法]]{{進捗|100%|2026-04-29}}(新試験対応) [[カテゴリ:高等学校日本史|探]] k0w051odkw2i6l13kkg6zoeyv3wl8am 304606 304589 2026-10-11T06:36:30Z Kwawe 68789 /* 第4章 古代の国家・社会の変容 */ 304606 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>高等学校日本史探究  高等学校日本史探究のページです。{{進捗状況}} 本ページの目次と項目の配列は、実教出版株式会社の新課程教科書「[https://www.jikkyo.co.jp/book/detail/23010423 日本史探究]」(日探702・日探007-901)に合わせて作成しています。文章の配列も原則上記教科書会社さんに従いました。学習指導要領に定められた日本史探究の標準単位数は'''3単位です。''' ※本ページは大学の二次試験まで対応させるため、日本史探究の完成時期は未定です。当面の間は日本史Bを参照して下さい。 == 第1部 原始・古代の日本と東アジア == INTRODUCTION === 第1章 日本文化のあけぼの === # [[高等学校日本史探究/日本列島最古の文化Ⅰ|日本列島最古の文化Ⅰ]]{{進捗|100%|2024-09-21}}(人類の誕生と日本列島への居住) # [[高等学校日本史探究/日本列島最古の文化Ⅱ|日本列島最古の文化Ⅱ]]{{進捗|100%|2024-10-01}}(日本の旧石器時代) # [[高等学校日本史探究/縄文時代の社会と文化|縄文時代の社会と文化]]{{進捗|100%|2026-09-27}}(縄文文化の成立~縄文社会と縄文人) # 弥生時代の社会と文化Ⅰ{{進捗|00%|2023-11-11}} # 弥生時代の社会と文化Ⅱ{{進捗|00%|2023-11-11}} === 第2章 ヤマト政権の成立と古墳文化 === # 小国の分立と邪馬台国{{進捗|00%|2023-11-11}} # 古墳の出現とヤマト政権の成立{{進捗|00%|2023-11-11}} # ヤマト政権の展開と統治の進展{{進捗|00%|2023-11-11}} # 古墳時代の生活と文化{{進捗|00%|2023-11-11}} === 第3章 律令国家の形成 === # [[高等学校日本史探究/古代国家の形成Ⅰ|古代国家の形成Ⅰ]]{{進捗|100%|2024-11-18}}(6世紀の朝鮮半島と倭~7世紀の東アジアと倭国) # [[高等学校日本史探究/古代国家の形成Ⅱ|古代国家の形成Ⅱ]]{{進捗|100%|2025-02-01}}(大化の改新~東北遠征と白村江の戦い) # [[高等学校日本史探究/古代国家の形成Ⅲ|古代国家の形成Ⅲ]]{{進捗|100%|2025-02-11}}(近江朝廷と壬申の乱~天武・持統期の政治改革) # [[高等学校日本史探究/飛鳥文化・白鳳文化|飛鳥文化・白鳳文化]]{{進捗|100%|2024-11-06}} # [[高等学校日本史探究/律令制度|律令制度]]{{進捗|100%|2025-06-03}}(大宝律令の官制~土地・人民の支配制度) # [[高等学校日本史探究/奈良時代の政治Ⅰ|奈良時代の政治Ⅰ]]{{進捗|100%|2025-07-21}}(遣唐使派遣と平城京遷都) # [[高等学校日本史探究/奈良時代の政治Ⅱ|奈良時代の政治Ⅱ]]{{進捗|100%|2025-11-22}}(奈良時代初期の政策~度重なる遷都と鎮護国家の仏教) # [[高等学校日本史探究/奈良時代の政治Ⅲ|奈良時代の政治Ⅲ]]{{進捗|100%|2025-12-21}}(公地公民制の修正~奈良時代後半の政争) # 天平文化 STEP UP 1 [[高等学校日本史探究/奈良時代の人々の暮らし|奈良時代の人々の暮らし]]{{進捗|100%|2026-04-09}}(奈良時代の貴族生活~生活文化の発展と庶民の苦難) === 第4章 古代の国家・社会の変容 === # [[高等学校日本史探究/律令体制再編期の政治と社会Ⅰ|律令体制再編期の政治と社会Ⅰ]]{{進捗|100%|2026-10-11}}(平安京遷都と東北経営) # [[高等学校日本史探究/律令体制再編期の政治と社会Ⅱ|律令体制再編期の政治と社会Ⅱ]]{{進捗|25%|2026-10-11}}(律令政治の再編成~法・儀式の整備と教育) # 律令体制再編期の政治と社会Ⅲ{{進捗|00%|2026-09-5}}(密教の隆盛~弘仁・貞観文化) # 摂関政治の成立と支配体制の転換 # 国風文化 == 第2部 中世の日本と世界 == INTRODUCTION === 第1章 荘園公領制の成立と院政 === ※荘園公領制の成立と院政は2027年4月に記述します。 * 荘園公領制の成立と院政Ⅰ * 荘園公領制の成立と院政Ⅱ * 荘園公領制の成立と院政Ⅲ * 荘園公領制の成立と院政Ⅳ === 第2章 中世の国家・社会の展開 === # 鎌倉幕府の成立と朝廷 # 中世に生きる人々 # 蒙古襲来と幕府の衰退 # 鎌倉文化 === 第3章 中世の国家・社会の変容 === # 南北朝の動乱 # 室町幕府の政治と外交 # 室町社会の展開と応仁の乱 # 室町文化 # [[高等学校日本史探究/戦国大名の分国経営Ⅰ|戦国大名の分国経営Ⅰ]]{{進捗|100%|2025-02-15}}(戦国時代の特質~戦国の争乱) # 戦国大名の分国経営Ⅱ{{進捗|00%|2023-00-00}}(分国経営) # 戦国大名の分国経営Ⅲ{{進捗|00%|2025-02-15}}(都市の発達と町衆~経済の混乱) STEP UP 2 東アジアのなかのアイヌ文化・琉球文化 STEP UP 3 女性と仏教 == 第3部 近世の日本と世界 == INTRODUCTION === 第1章 東アジア世界の変容と天下統一 === # 織豊政権 # 天下統一の完成 # 近世成立期の文化 歴史資料と近世の展望 === 第2章 幕藩体制の成立と展開 === # 幕藩体制の成立 # 貿易の統制と対外関係 # 近世社会のしくみ # 幕府政治の展開 # 経済の発展 # 元禄文化と学芸の発展 STEP UP 4 近世の遊郭 === 第3章 近世の国家・社会の変容 === # 幕藩体制の動揺と幕政の改革 # 欧米列強の接近と天保の改革 # 近世文化の成熟と変容 STEP UP 5 百姓一揆と義民物語 == 第4部 近現代の地域・日本と世界 == INTRODUCTION(近代) === 第1章 開国から倒幕へ === 歴史資料と近代の展望 === 第2章 明治維新 === # 明治維新 # 文明開化 === 第3章 近代国家の形成 === # 立憲国家への道 # 議会政治の展開と日清・日露戦争 # 産業革命と社会の変化 # 近代文化の形成と展開 STEP UP 6 日露戦争のアジアへの影響 === 第4章 両大戦間の日本 === # 第一次世界大戦 # 政党政治の展開 # 市民文化の展開 STEP UP 7 近代日本の「食」と米 === 第5章 十五年戦争と日本 === # 満洲事変 # 日中戦争 # アジア・太平洋戦争(太平洋戦争) INTRODUCTION(現代) === 第6章 戦後日本の形成 === # 占領と民主改革 # 独立と日米安保体制の形成 # 高度経済成長下の日本 STEP UP 8 エネルギー革命 === 第7章 グローバル化のなかの現代日本 === # 「国際化」する経済大国Ⅰ{{進捗|00%|2023-00-00}}(ドル=ショックと石油危機~安定成長への転換まで) # 「国際化」する経済大国Ⅱ{{進捗|00%|2023-00-00}}(経済大国への道と国際化の時代) # 「国際化」する経済大国Ⅲ{{進捗|00%|2023-00-00}}(貿易摩擦とバブル経済~「豊かさ」と社会・生活の変容まで) # [[高等学校日本史探究/新たな世紀の日本へⅠ|新たな世紀の日本へⅠ]]{{進捗|100%|2026-04-10}}(冷戦の終結とグローバル化~湾岸戦争と平和維持活動まで) # [[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]{{進捗|25%|2026-09-24}}(政界再編と55年体制の終結~行政改革と日米安保の変化まで) # [[高等学校日本史探究/新たな世紀の日本へⅢ|新たな世紀の日本へⅢ]]{{進捗|100%|2026-09-23}}(「構造改革」と対テロ戦争~憲法改正論と政権交代まで) # [[高等学校日本史探究/新たな世紀の日本へⅣ|新たな世紀の日本へⅣ]]{{進捗|25%|2026-09-24}}(新しい世界を目指して~平成時代・令和時代の文化史・科学史まで) 【STEP UP 9】[[高等学校日本史探究/多文化共生|多文化共生]]{{進捗|100%|2024-09-24}} 現代の日本の課題の探究 == 読書案内・学習方法 == * [[高等学校日本史探究/資料出所・読書案内|資料出所・読書案内]] * [[学習方法/高校日本史|高校日本史学習方法]]{{進捗|100%|2026-04-29}}(新試験対応) [[カテゴリ:高等学校日本史|探]] 8e76tipuj8b9s1kmkkr9ypd14qwp24z 解析学基礎/ベクトル解析 0 45683 304551 304536 2026-10-10T12:48:51Z ~2026-53216-21 92705 /* ポテンシャル論 */ 304551 wikitext text/x-wiki {{Pathnav|数学|解析学|解析学基礎|frame=1}} {{wikipedia|ベクトル解析}} ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。 ==前提知識== ここでは、実数のみで考える。 ===ベクトル=== [[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。 ===行列=== [[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。 ===多変数解析=== [[解析学基礎/多変数関数の微積分]]を参照。 ===領域=== <math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。 <math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。 注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。 <math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。 閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。 集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、 #<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math> #<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math> 「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。 空でない開連結集合を'''領域'''という。 実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。 ===右手系=== 三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。 右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。 外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。 系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。 位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。 偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。 :(軸性)×(軸性)=(軸性) :(軸性)×(極性)=(極性) :(極性)×(極性)=(軸性) ==基礎事項== ===ベクトル関数=== 関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。 ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。 ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。 例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、 :<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性) :<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math> :<math>=\boldsymbol{e}_x</math> と求まる。 このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。 また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は :<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math> :<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性) :<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math> である。 この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。 高階導関数・高階微分可能も同様にして定義される。 <math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。 高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。 例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。 曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。 例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。 1変数ベクトル関数の微分に関して、以下の公式が成り立つ。 #定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math> #和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math> #積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math> #商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math> #内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math> #外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math> #スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math> ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に :<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math> で与えられる。 つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。 ここで、このスカラー関数が定数関数である条件に就て見てみよう。 :<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して :<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math> :両辺微分すると内積の微分より :<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :逆に、 :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math> :<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math> :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数) :<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より :<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math> よって、以下が成り立つ。 {{定理|(直交条件の定理)}} :<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math> {{定理終わり}} これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。 また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。 :所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。 :両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math> :ここで元のベクトル関数との外積をとると :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math> :逆に、 :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので :<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。 :各成分ごとに微分方程式を解くと、 ::これは変数分離型微分方程式なので第i成分は ::<math>\frac{df_i}{dx}=g(x)f_i(x)</math> ::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math> ::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math> ::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math> :よって :<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math> :ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと :<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る// よって、以下が成り立つ。 {{定理|(平行条件の定理)}} <math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として :<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math> {{定理終わり}} ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。 一般次元では外積に代わって次の関係式を用いる。 :<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math> これはCS不等式の等号成立の場合である。 実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は :<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math> であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/> 平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。// 補足として、力学への応用を考える。 :速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると :<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math> :よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。 :これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。 :平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。 :円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると ::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math> :もう一度微分して ::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math> :則ち ::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math> :位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので ::<math>\lambda r^2 + v^2 = 0</math> ::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math> :則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。// なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。 <math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として :<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル) と表される。 また、定積分は :<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math> と表される。 1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。 #定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math> #和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math> #内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math> #外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math> #スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math> #内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math> #外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math> #置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math> 平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。 :1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。 :第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、 :両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで :<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。 :よって一般解は :<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math> ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。 例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して :<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math> と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。 また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。 一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。 この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。 また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。 ===ベクトル場・スカラー場=== 写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。 実際には<math>m=n</math>の場合を考えることが多い。 写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。 それぞれ上で述べたベクトル関数・スカラー関数に対応する。 もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると :スカラー場:<math>\varphi=\varphi(p)</math> :ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math> のように場は「点を入力とする<sup>※</sup>関数」である。 <small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small> ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。 則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。 ここで、二変数関数の極値を思い返してみる。 <math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として :<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math> という定義だった。 <math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。 ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。 なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。 ベクトル場の例としては、電場・磁場・重力場などが挙げられる。 スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。 例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。 ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。 例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について :<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。 これは、ベクトル場の加法の定義が :<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math> となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。 曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。 ==曲線論・曲面論== ===曲線=== <math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。 例えば円を陽関数表示しようとすると :<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて :<math>y=\pm\sqrt{r^2-x^2}</math> 則ち :<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math> という多価関数が必要になる。 これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。 しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。 :<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲) こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。 一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。 ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。 例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。 パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。 パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。 <small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small> <math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。 滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。 <math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。 速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。 なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。 正則な曲線に対して曲線長('''弧長''')を考える。 二次元曲線の場合は数学Ⅲで既に扱った。 :<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math> 実は、これを一般の<math>n</math>次元にそのまま拡張することができる。 {{定理|(弧長公式)}} 曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> で与えられる。 {{定理終わり}} *証明 :<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。 :<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。 :ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より ::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math> :分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので ::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math> :区分求積法より最後の無限級数は収束して :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>// ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。 1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。 曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。 通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。 また、弧長パラメータ表示で連鎖律を適用すると :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math> ここで微分積分学の基本定理より :<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math> なので :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math> であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。 よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。 弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。 <math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は :<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math> と表される。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math> であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。 領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。 例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、 :定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math> :合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math> :<math>\int y dy=\int xdx</math> :<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math> :よって双曲線<math>y^2-x^2=2C</math>// この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで :<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。 「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。 有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。 流線の微分方程式を弧長パラメータ表示を用いて変形する。 :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて :<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math> 元の方程式の両辺でノルムをとると :<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> 代入して :<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> :<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math> ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。 ===フレネ標搆=== ここでは、三次元空間に於ける正則曲線について考える。 <math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。 先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。 主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。 <math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。 即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。 平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで :法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math> :展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math> :接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math> とわかる。 <math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。 主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。 なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。 単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。 ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。 単位従法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので :<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので :<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math> 外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より :<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math> となるスカラー関数<math>\tau(s)</math>が存在する。 この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。 <math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。 単位主法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math> ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して :<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math> よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。 :<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math> これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。 {{定理|(フレネ=セレーの公式)}} :<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math> {{定理終わり}} 表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。 捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。 例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。 :媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math> :接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math> :弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math> :<math>\therefore t=\frac{s}{a}</math> :<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math> :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math> :<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math> :<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math> :<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>// フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。 従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。 {{定理|(曲線の基本定理)}} 開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/> このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。 {{定理終わり}} 剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。 <math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。 例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。 <math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲) だったが、二次近似式(三次以降を切り捨てた式)を考えると :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math> フレネ標搆を用いて書き直すと :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math> 二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/> 接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は :<math>x^2+(y-R)^2=R^2</math> :<math>y=R-\sqrt{R^2-x^2}</math> テイラー展開して :<math>y=\frac{x^2}{2R}+O(x^4)</math> 二次の項を比較すると :<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math> よって :<math>R=\frac{1}{\kappa}</math> と定義するのは妥当である。 なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。 フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。 ===単純閉曲線=== パラメータ区間を<math>I=[a, b]</math>とする。 このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。 端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。 自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。 幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。 このことは以下の定理によって保証される。 {{定理|(ジョルダンの曲線定理)}} 平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。 {{定理終わり}} この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。 正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。 ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。 主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。 ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。 <math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。 ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。 任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。 つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。 集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。 弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。 平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。 なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。 集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。 集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。 単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。 曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。 例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。 実は、この事実は楕円に限らないことが以下の定理で示される。 {{定理|(ムコパディヤーヤの定理・四頂点定理)}} <math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。 {{定理終わり}} *証明 :滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。 :卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。 :曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。 :曲率関数が定数関数でないとする。 :ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。 :従って少なくとも2つの頂点を持つ。 :ここで、頂点がこの2つのみと仮定する。 :曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。 :線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。 :<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、 :<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。 :同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。 :従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。 :<math>y(a)=y(b)=0</math>に注意すると部分積分して :<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math> :主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので :<math>\xi'_2(s)=-\kappa(s)y'(s)</math> :よって :<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math> :なので矛盾した不等式<math>0<0</math>を得る。 :則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。 :そのような点を<math>\mathrm{L}</math>と置く。 :<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。 :このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので :<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。 :同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。 :この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。 :よって、頂点個数の最小値は<math>4</math>である。// 最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。 この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。 先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して :<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math> :<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math> ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/> 一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。 ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。 <math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として :<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math> ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。 閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。 ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。 <small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small> 弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。 従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math> この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。 曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した :<math>\mu:=\int_a^b |\kappa(s)|ds</math> という量を考えることにする。 これを閉曲線の'''全曲率'''と呼ぶ。 全曲率に対して以下の定理が成り立つ。 {{定理|(フェンヒェルの定理)}} 滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。 {{定理終わり}} 証明は省略する。 ===曲面=== 多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。 一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。 二次式で陰関数表示される曲面を'''二次曲面'''という。 以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。 *'''球面'''(sphere) :高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。 *'''楕円面'''(ellipsoid) :楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。 *'''楕円拋物面'''(elliptic paraboloid) :楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。 *'''双曲拋物面'''(hyperbolic paraboloid) :双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。 *'''一葉双曲面'''(hyperboloid of one sheet) :楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。 *'''二葉双曲面'''(hyperboloid of two sheet) :楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。 *'''錐面'''(conical surface) :方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。 閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。 同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。 厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。 <small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small> 曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。 :パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math> :ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math> また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。 例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。 <math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。 これのベクトル方程式を求めてみよう。 :①<math>c=0</math>のとき ::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math> ::[1]<math>b=0</math>のとき :::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math> :::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math> :::<math>y=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math> ::[2]<math>b\neq0</math>のとき :::<math>x=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math> :②<math>c\neq0</math>のとき ::<math>x=t, y=u</math>と置換すると ::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math> ::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math> なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。 <math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。 <math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から :<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math> :<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math> ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。 これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。 接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。 曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。 三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。 モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。 以下、正則曲面のみ扱う。 <math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。 :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> 則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から :<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math> である。 これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。 {{定理|(曲面積)}} <math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br> 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は :<math>S=\iint_D \sqrt{EG-F^2}dtdu</math> {{定理終わり}} この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。 <math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。 具体的には、 :<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math> より :<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math> ここで合成関数の常微分公式より :<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math> なので :<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math> :<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math> よって :<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math> このように、線素は<math>\theta</math>のとり方に依存しない。 そこで、最後の式で右辺を二乗した :<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math> を<math>S</math>の'''第一基本形式'''と定める。 第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと :<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。 ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。 また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。 また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。 則ち、第一基本量が曲面の本質であると予想される。 <math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。 等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。 面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。 曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。 向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。 メビウスの帯が向き付け不能である証明を概説する。 :接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。// 四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。 2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、 #パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。 #この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。 #<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math> この2つは'''パラメータ変換で同値'''という。 このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。 任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。 向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。 外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。 <math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。 パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。 ===回転面=== ここでは三次元空間内の曲面について考える。 高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。 簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。 :任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。 :領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。 :則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。 纏めると以下のようになる。 {{定理|(回転面の方程式)}} <math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は :<math>z=f(\sqrt{x^2+y^2})</math> {{定理終わり}} <math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。 回転面に対し、元の曲線を'''母線'''という。 母線が直線である回転面は'''円錐'''である。 :<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は :<math>z=m\sqrt{x^2+y^2}+n</math> :<math>z-n = m\sqrt{x^2+y^2}</math> これを両辺二乗すると :<math>(z-n)^2=m^2x^2+m^2y^2</math> であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。 回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。 点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。 このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。 {{定理|(ロドリゲスの公式)}} :<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> {{定理終わり}} *証明 :<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math> :<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので ::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math> :<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より ::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math> :<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、 :<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から ::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> :これらを足して ::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>// この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。 また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。 ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。 :円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。 :ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は ::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math> :ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると ::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math> :なので、 ::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math> :円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので ::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math> :であり、 ::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math> :ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より ::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math> :このベクトルと軸ベクトルの内積をとると ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math> ::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math> :<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math> :則ち ::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>// 円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。 ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。 正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、 :<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので :<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> 則ち、ベクトル関数の全微分は微小回転で近似される。 オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと :<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math> これの両辺を<math>dt</math>で割って :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math> これは剛体の速度公式である。 ロドリゲスの公式の一次変換表記を考える。 <math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、 :<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math> :<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math> :<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると :<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、 :<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math> という表示を得る。 更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より :<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math> が成り立つので、最終的に :<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math> と二次の行列多項式で表示される。 なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。 ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。 先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。 <math>\mathbf{N}\boldsymbol{r}</math>を計算すると :<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math> 則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。 更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。 ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br> また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math> ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math> ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。 このことは以下の考え方でも求まる。<br> <math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は :<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math> ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので :<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math> これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、 :<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math> :<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math> :<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math> 則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。 更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。 これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。 補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。 ===種々の曲率=== ここでは三次元空間内の正則曲面について考える。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。 <math>C</math>の接ベクトルは合成関数微分公式より :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math> と表示される。 ここで両辺の<math>ds</math>を形式的に払うと :<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> これの自分自身との内積をとると :<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math> 弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると :<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math> と、第一基本形式を別の方法で得られた。 <math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで :<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math> :<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> :<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。 後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。 :<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math> ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。 <math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math> なので<math>ds</math>に関して形式的に通分して :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> 右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。 <math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math> また、<math>u</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math> ここから第二基本量は :<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math> とも表示され、第二基本形式の別表示 :<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> を得る。 これは更に全微分から微小ベクトル同士の内積として :<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math> とも書ける。 第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。 第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと :<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。 ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。 :<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに :<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math> :が判るので、 :<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math> これはヘッシアンを法線の長さで割った行列である。 則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。 実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。 このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。 ここで第二基本形式を定義した式 :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math> 右辺を形式的に<math>dt^2</math>で割ると :<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。 そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。 :<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> 法曲率の幾何学的意味を考える。 <math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。 則ち、法曲率は法曲線の曲率に対応する。 なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。 法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。 :法曲率の定義式より ::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*) :これが<math>k</math>の恒等式なので微分しても等号が成り立ち、 ::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math> :フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので ::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@) :が成り立つ必要がある。 :これを<math>k</math>倍して(*)を引くと ::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#) :これと(@)を連立して ::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math> :これを(#)に代入して ::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($) :という二次方程式を得る。 :($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。 :逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。// この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。 ($)の左辺を変形してみると、 :<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math> :<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math> :<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math> :<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math> :<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math> という、第一基本行列と第二基本行列を用いた形が出てきた。 ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して :<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math> これを二次形式表示すると :<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math> と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。 この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。 二つの主方向の関係を調べる。 :主方向の定義より ::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> :なので ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> :第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math> :上下の式の差をとって ::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math> :<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。 ::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math> :この二つのベクトルは主方向を向くので2つの主方向は直交する。 <math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。 上の結果から、'''臍点でない各点で2つの主方向は直交する'''。 主曲率に対して解と係数の関係から得る値 :<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math> をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。 全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。 そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。 ここで<math>\mathbf{S}</math>の固有方程式は :<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math> <math>\det\mathbf{K}^{-1}\neq0</math>より :<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math> これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。 則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。 更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。 {{定理|(ヴァインガルテンの式)}} :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> {{定理終わり}} *証明 :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。 :両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> :<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math> :<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>// 臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から :<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math> であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して :<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math> を得る。 <math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して :<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math> ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると :<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{T}</math> であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。 :<math>\mathbf{H}={}^t\!\mathbf{H}</math> より :<math>{}^t\!\mathbf{T}=\mathbf{T}</math> が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。 よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。 モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに :<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math> を得る。 等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。 ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。 具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。 主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。 任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。 平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。 極小曲面は表面張力の理論に応用されている。 例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。 曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。 最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。 :<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> :<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math> これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として :<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math> この<math>\mathbf{W}</math>を'''第三基本行列'''という。 見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。 臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。 このとき、各基本形式は :<math>I=dp^2+dq^2</math> :<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math> :<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math> と表示されることが知られている。 第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。 :<math>I\!I\!I=2HI\!I-KI</math> このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。 これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。 この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。 なお、平均曲率を考えるときは外側の空間の情報が必要である。 ==直交曲線座標系== {{節stub}} ===円筒座標系=== 平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。 空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。 円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。 そのため、円筒座標系と直交座標系の対応は以下のようになる。 :<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math> 但し、<math>r</math>は基準面の裏側では負とする。 直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。 :<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。 :<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。 :<math>z</math>曲線:<math>z</math>軸に平行な直線。 ここで、各曲線に沿った微小変化がどのように表されるか見ていく。 <math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。 <math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。 上で求めた関係式より :<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math> なので、 :<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> よって :<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math> 再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。 纏めると以下のようになる。 {| class="wikitable" | ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム |- |style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math> |- |style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math> |- |style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math> |} ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。 そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。 :<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math> :<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math> :<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math> これを一次変換の形式で表すと :<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math> となる。 このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。 なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。 逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。 回転行列は直交行列なので :<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math> であり、 :<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math> 円筒座標系は、[[電磁気学]]の解析でよく使用される。 例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。 ===極座標系=== 高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。 一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。 このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。 xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。 <math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。 <math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。 <math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。 逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。 <math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。 また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。 よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。 以上を纏めると、直交座標と球面座標の対応関係は :<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math> 一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。 直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。 :<math>r</math>曲線:原点を通る半直線。 :<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。 :<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。 各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて :<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math> と求まる。 これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により :<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math> と変換テンソルが求まる。 これも直交行列であるので、逆変換テンソルは :<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math> と求まる。 球面座標系は、[[古典力学]]の解析でよく使用される。 例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。 球面座標系は特に機械制御に応用されている。 円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。 ===円環座標系=== ===双極座標系=== ===回転放物面座標系=== ===放物柱座標系=== ===回転楕円面座標系=== ===楕円柱座標系=== ===楕円体座標系=== ==空間微分== ここでは三次元ユークリッド空間で考える。 ===勾配=== スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、 :<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math> を<math>\varphi</math>の'''勾配'''(gradient)と定義する。 勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。 勾配で定義される概念としては、電場が有名である。 :電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は :<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math> 勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。 '''空間偏微分演算子'''(ハミルトン演算子)を <math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math> と定義する。 この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。 <math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。 この演算子を用いれば勾配の表式は :<math>\mathrm{grad}\,\varphi=\nabla\varphi</math> となる。 <math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。 勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。 #<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性) #<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則) #<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分) #<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分) 任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。 以下、正則なスカラー場に限って扱う。 等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。 :<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。 :等位面の方程式を<math>t</math>で両辺微分して ::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math> :<math>t=t_0</math>のとき ::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math> ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。 よって等位面の接平面の方程式は :<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math> である。 スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は :<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math> これをベクトルの内積とみると :<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> :<math>=\nabla\varphi\cdot d\boldsymbol{x}</math> ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。 <math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。 このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数 :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math> を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。 方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。 :<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。 ::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math> ::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math> :ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば ::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math> ::<math>=\frac{d\Phi(t)}{dt}</math> ::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math> ::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math> ::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math> よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。 内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math> よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。 このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。 方向微分係数を'''方向導関数'''に拡張することを考える。 形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。 :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math> 正式には極限を用いて :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math> と定義する。 内積を書き下すと :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math> これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと :<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math> :<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math> となる。 則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。 更に、多変数関数のテイラー二次近似は :<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math> と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。 多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。 スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。 ベクトル場の全微分は :<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math> で定義された。 ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。 この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。 則ち、ベクトル場の全微分は :<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math> と表される。 これを形式的に :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math> と書き表すことができる。 則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。 ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。 ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math> が成り立つことが判る。 これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。 則ち、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> である。 ===発散=== ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、 :<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math> を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。 発散が用いられる概念としては、'''ガウスの法則'''が有名である。 :電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として :<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math> 球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では <math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。 勾配と同様に発散をナブラで表すことを考えると、 :<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math> という表式を得る。 <math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。 発散に対しては以下が成り立つ。 #<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性) #<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は内積の線型性より、後者は成分演算と勾配の定義より示される。 ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。 :<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math> ここで跡が発散そのものになっているので :<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> が成り立つ。 発散の物理的意味を考える。 :密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。 :点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。 :単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より ::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math> :<math>\delta x\to0</math>の極限で ::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math> :他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では ::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math> :よって単位体積当たりでは ::<math>\rho\nabla\cdot\boldsymbol{v}</math> :を得る。 ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。 この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。 発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。 また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。 ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。 位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。 :<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math> <math>y, z</math>も同様なので :<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math> よって発散のライプニッツ則から :<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math> この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。 ベクトル解析の黎明期では発散の逆符号で表される :<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math> という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。 ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。 ===回転=== 回転運動は、以下の3つにより一意に定まる。 *回転軸の方向 *回転の速さ *回転方向(軸に対して右回転か左回転か) 「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。 従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。 ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。 :<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> <math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。 <math>z</math>軸方向の成分について考える。 <math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。 ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。 対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。 これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。 回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。 :電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として :<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math> 流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。 回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。 勾配・発散と同様に空間偏微分演算子による表記を考える。 成分に着目すると外積の形式なので、 :<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math> と表されることが判る。 ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。 外積の性質から、回転は行列式 :<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math> でも表示される。 回転に対しては以下が成り立つ。 #<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性) #<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は外積の線型性より、後者は成分演算と勾配の定義より示される。 回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。 回転は、ヤコビ行列を用いると以下のように表される。 :<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> :ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。 ===ラプラシアン=== 上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。 二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。 :<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math> ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。 そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。 以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。 :<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math> 二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。 但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。 ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。 :<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math> スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。 勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。 ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。 :'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math> :'''ポアソン方程式''':<math>\text{∆}\varphi=f</math> :'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math> :'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math> :'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math> ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。 なお、ラプラス方程式の解を'''調和関数'''という。 <math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。 :<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math> ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。 実際には以下のように表示される。 :<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math> *証明 :対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。 ::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math> :より ::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math> :また、 ::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> :より ::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math> ::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math> :<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると ::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math> ::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial {y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math> ::<math>=\text{∆}a_x</math>// ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。 則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。 歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。 :<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math> これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。 これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。 また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は :<math>\text{⧠}\psi=-\mu^2\psi</math> というミンコフスキー空間上のヘルツホルム方程式と解釈される。 ===微分定理=== ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。 既に紹介したものを以下に並べる。 #勾配 #:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math> #:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>( #:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math> #:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math> #:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math> #:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> #発散 #:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math> #:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math> #:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> #回転 #:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math> #:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math> #:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> #ラプラシアン #:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math> #:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math> 二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。 <math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math> 次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。 スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math> :<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math> ベクトル場の発散はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math> ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math> :<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math> 則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。 一階の空間微分の結果に対してラプラシアンを考えてみる。 :<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math> :<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math> :<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math> ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。 則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。 :<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。 スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。 :<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すればいいので公式化する必要が無い。 :<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math> :<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math> :<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math> :<math>\nabla\times(\boldsymbol{a}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math> :<math>\boldsymbol{a}\times(\nabla\times\nabla)</math> :<math>\nabla\cdot(\nabla\times\nabla)</math> :<math>\nabla\times(\nabla\times\nabla)</math> は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br> また、三重積の公式はナブラを代入した時点で破綻する。 次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。 :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すれば良いので公式化する必要が無い。 :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math> 及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。 故に、ここで問題になるのは :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math> の扱いである。 これらには以下の公式が成り立つ。 :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math> ===ポテンシャル論=== ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか? ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば :<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math> という一階線型連立偏微分方程式となる。 この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。 そして、その形状を具体的に与えるのが次の定理である。 {{定理|(ポアンカレの補題1)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が単連結であることである。 {{定理終わり}} 証明は後述する。 この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。 保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math> :<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1) :これを<math>y</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math> :更に回転の条件から ::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math> :これが<math>a_y(x,y,z)</math>に等しいので ::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math> :これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。 :両辺を<math>y</math>で偏積分して ::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math> :これを(1)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2) :これを<math>z</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math> :更に回転の条件から ::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> ::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> :これが<math>a_z(x,y,z)</math>に等しいので ::<math>\frac{dh}{dz}=a_z(m,n,z)</math> :これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。 :両辺を<math>z</math>で常積分して ::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math> :これを(2)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>// ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。 ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか? これも同様に以下の定理で与えられる。 {{定理|(ポアンカレの補題2)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が'''可縮'''であることである。 {{定理終わり}} 証明は後述する。 ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。 ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math> :第一式より ::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math> :<math>y</math>で偏積分して ::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math> :ライプニッツの積分法則より ::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3) :第三式より ::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math> :<math>y</math>で偏積分して ::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math> :ライプニッツの積分法則より ::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math> :これと(3)を第二式に代入して ::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math> ::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math> ::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math> :よって ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4) :この右辺を<math>h(x, y, z)</math>とおくと ::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math> :なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。 :これは(4)の左辺が<math>y</math>に依存しないことと整合する。 :故に(4)は ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math> :という二変数の偏微分方程式に落ちる。 :この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。 :このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。 :一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので ::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math> :同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して ::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math> :を得る。 :これは全微分方程式が完全微分方程式である条件なので、 ::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math> :なるスカラー場<math>\Phi</math>が存在する。 :則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>// ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。 ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。 ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。 ポテンシャルに関連した定理として、以下が成り立つ。 {{定理|(ヘルツホルムの定理)}} ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。 則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math> を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。 {{定理終わり}} *証明 :ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math> :ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math> :発散の線型性より ::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math> :ここでポアンカレの補題2を用いて ::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>// この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。 広義ポテンシャルに対して :<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math> が成立する。 広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。 例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式) :<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math> をヘルツホルム分解とクーロンゲージ条件により解析すると :<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math> を得る。 更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。 ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。 *応用問題 *:真空のマクスウェル方程式<math> \begin{cases} \nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\ \nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\ \nabla\cdot\boldsymbol{D}&=0\\ \nabla\cdot\boldsymbol{B}&=0\\ \end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。 ==空間積分== ===線積分=== ===面積分=== ===体積分=== ===積分定理=== ==発展事項== {{節stub}} {{Advanced|多様体論}} {{Advanced|微分幾何学}} {{Advanced|積分幾何学}} ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。 ===体積分再考=== 体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。 線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。 1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。 線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。 媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。 体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。 全微分を一次変換表記すると :<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。 そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。 '''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。 そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。 これは正方行列ならヤコビアンの絶対値に一致する。 {{NavTop|title=補足:体積拡大率に一致する証明}} :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math> よって :<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math> :<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math> :<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列) :<math>=\mathbf{R}^*\mathbf{R}</math> :<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math> <math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/> 則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。// {{NavBottom}} よって体積分は :<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math> ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。 実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。 なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。 実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。 ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。 ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。 :<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。 つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。 ※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。 ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。 ===多様体=== ===微分形式=== [[線型代数学続論/外積代数]]も参照。 ===リーマン計量=== ===テンソル解析=== [[線型代数学続論/テンソル代数]]も参照。 ===複素ベクトル解析=== [[複素解析学]]も参照。 {{DEFAULTSORT:へくとるかいせき}} [[Category:解析学]] [[Category:微分積分学]] [[Category:ベクトル解析|かいせきかくきそ]] 3o7h6jridtwc75vtmtm0e5vpm633mbw 304595 304551 2026-10-11T05:22:59Z ~2026-53216-21 92705 /* 空間積分 */ 304595 wikitext text/x-wiki {{Pathnav|数学|解析学|解析学基礎|frame=1}} {{wikipedia|ベクトル解析}} ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。 ==前提知識== ここでは、実数のみで考える。 ===ベクトル=== [[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。 ===行列=== [[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。 ===多変数解析=== [[解析学基礎/多変数関数の微積分]]を参照。 ===領域=== <math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。 <math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。 注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。 <math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。 閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。 集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、 #<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math> #<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math> 「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。 空でない開連結集合を'''領域'''という。 実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。 ===右手系=== 三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。 右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。 外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。 系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。 位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。 偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。 :(軸性)×(軸性)=(軸性) :(軸性)×(極性)=(極性) :(極性)×(極性)=(軸性) ==基礎事項== ===ベクトル関数=== 関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。 ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。 ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。 例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、 :<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性) :<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math> :<math>=\boldsymbol{e}_x</math> と求まる。 このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。 また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は :<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math> :<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性) :<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math> である。 この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。 高階導関数・高階微分可能も同様にして定義される。 <math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。 高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。 例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。 曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。 例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。 1変数ベクトル関数の微分に関して、以下の公式が成り立つ。 #定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math> #和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math> #積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math> #商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math> #内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math> #外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math> #スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math> ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に :<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math> で与えられる。 つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。 ここで、このスカラー関数が定数関数である条件に就て見てみよう。 :<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して :<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math> :両辺微分すると内積の微分より :<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :逆に、 :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math> :<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math> :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数) :<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より :<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math> よって、以下が成り立つ。 {{定理|(直交条件の定理)}} :<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math> {{定理終わり}} これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。 また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。 :所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。 :両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math> :ここで元のベクトル関数との外積をとると :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math> :逆に、 :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので :<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。 :各成分ごとに微分方程式を解くと、 ::これは変数分離型微分方程式なので第i成分は ::<math>\frac{df_i}{dx}=g(x)f_i(x)</math> ::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math> ::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math> ::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math> :よって :<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math> :ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと :<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る// よって、以下が成り立つ。 {{定理|(平行条件の定理)}} <math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として :<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math> {{定理終わり}} ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。 一般次元では外積に代わって次の関係式を用いる。 :<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math> これはCS不等式の等号成立の場合である。 実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は :<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math> であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/> 平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。// 補足として、力学への応用を考える。 :速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると :<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math> :よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。 :これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。 :平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。 :円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると ::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math> :もう一度微分して ::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math> :則ち ::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math> :位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので ::<math>\lambda r^2 + v^2 = 0</math> ::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math> :則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。// なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。 <math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として :<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル) と表される。 また、定積分は :<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math> と表される。 1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。 #定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math> #和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math> #内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math> #外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math> #スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math> #内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math> #外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math> #置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math> 平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。 :1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。 :第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、 :両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで :<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。 :よって一般解は :<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math> ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。 例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して :<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math> と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。 また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。 一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。 この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。 また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。 ===ベクトル場・スカラー場=== 写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。 実際には<math>m=n</math>の場合を考えることが多い。 写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。 それぞれ上で述べたベクトル関数・スカラー関数に対応する。 もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると :スカラー場:<math>\varphi=\varphi(p)</math> :ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math> のように場は「点を入力とする<sup>※</sup>関数」である。 <small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small> ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。 則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。 ここで、二変数関数の極値を思い返してみる。 <math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として :<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math> という定義だった。 <math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。 ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。 なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。 ベクトル場の例としては、電場・磁場・重力場などが挙げられる。 スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。 例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。 ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。 例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について :<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。 これは、ベクトル場の加法の定義が :<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math> となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。 曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。 ==曲線論・曲面論== ===曲線=== <math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。 例えば円を陽関数表示しようとすると :<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて :<math>y=\pm\sqrt{r^2-x^2}</math> 則ち :<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math> という多価関数が必要になる。 これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。 しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。 :<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲) こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。 一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。 ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。 例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。 パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。 パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。 <small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small> <math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。 滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。 <math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。 速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。 なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。 正則な曲線に対して曲線長('''弧長''')を考える。 二次元曲線の場合は数学Ⅲで既に扱った。 :<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math> 実は、これを一般の<math>n</math>次元にそのまま拡張することができる。 {{定理|(弧長公式)}} 曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> で与えられる。 {{定理終わり}} *証明 :<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。 :<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。 :ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より ::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math> :分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので ::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math> :区分求積法より最後の無限級数は収束して :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>// ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。 1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。 曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。 通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。 また、弧長パラメータ表示で連鎖律を適用すると :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math> ここで微分積分学の基本定理より :<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math> なので :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math> であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。 よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。 弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。 <math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は :<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math> と表される。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math> であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。 領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。 例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、 :定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math> :合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math> :<math>\int y dy=\int xdx</math> :<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math> :よって双曲線<math>y^2-x^2=2C</math>// この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで :<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。 「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。 有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。 流線の微分方程式を弧長パラメータ表示を用いて変形する。 :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて :<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math> 元の方程式の両辺でノルムをとると :<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> 代入して :<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> :<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math> ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。 ===フレネ標搆=== ここでは、三次元空間に於ける正則曲線について考える。 <math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。 先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。 主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。 <math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。 即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。 平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで :法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math> :展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math> :接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math> とわかる。 <math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。 主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。 なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。 単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。 ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。 単位従法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので :<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので :<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math> 外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より :<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math> となるスカラー関数<math>\tau(s)</math>が存在する。 この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。 <math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。 単位主法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math> ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して :<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math> よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。 :<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math> これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。 {{定理|(フレネ=セレーの公式)}} :<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math> {{定理終わり}} 表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。 捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。 例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。 :媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math> :接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math> :弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math> :<math>\therefore t=\frac{s}{a}</math> :<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math> :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math> :<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math> :<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math> :<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>// フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。 従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。 {{定理|(曲線の基本定理)}} 開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/> このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。 {{定理終わり}} 剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。 <math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。 例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。 <math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲) だったが、二次近似式(三次以降を切り捨てた式)を考えると :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math> フレネ標搆を用いて書き直すと :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math> 二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/> 接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は :<math>x^2+(y-R)^2=R^2</math> :<math>y=R-\sqrt{R^2-x^2}</math> テイラー展開して :<math>y=\frac{x^2}{2R}+O(x^4)</math> 二次の項を比較すると :<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math> よって :<math>R=\frac{1}{\kappa}</math> と定義するのは妥当である。 なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。 フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。 ===単純閉曲線=== パラメータ区間を<math>I=[a, b]</math>とする。 このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。 端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。 自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。 幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。 このことは以下の定理によって保証される。 {{定理|(ジョルダンの曲線定理)}} 平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。 {{定理終わり}} この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。 正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。 ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。 主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。 ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。 <math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。 ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。 任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。 つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。 集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。 弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。 平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。 なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。 集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。 集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。 単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。 曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。 例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。 実は、この事実は楕円に限らないことが以下の定理で示される。 {{定理|(ムコパディヤーヤの定理・四頂点定理)}} <math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。 {{定理終わり}} *証明 :滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。 :卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。 :曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。 :曲率関数が定数関数でないとする。 :ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。 :従って少なくとも2つの頂点を持つ。 :ここで、頂点がこの2つのみと仮定する。 :曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。 :線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。 :<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、 :<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。 :同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。 :従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。 :<math>y(a)=y(b)=0</math>に注意すると部分積分して :<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math> :主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので :<math>\xi'_2(s)=-\kappa(s)y'(s)</math> :よって :<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math> :なので矛盾した不等式<math>0<0</math>を得る。 :則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。 :そのような点を<math>\mathrm{L}</math>と置く。 :<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。 :このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので :<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。 :同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。 :この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。 :よって、頂点個数の最小値は<math>4</math>である。// 最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。 この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。 先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して :<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math> :<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math> ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/> 一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。 ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。 <math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として :<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math> ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。 閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。 ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。 <small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small> 弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。 従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math> この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。 曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した :<math>\mu:=\int_a^b |\kappa(s)|ds</math> という量を考えることにする。 これを閉曲線の'''全曲率'''と呼ぶ。 全曲率に対して以下の定理が成り立つ。 {{定理|(フェンヒェルの定理)}} 滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。 {{定理終わり}} 証明は省略する。 ===曲面=== 多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。 一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。 二次式で陰関数表示される曲面を'''二次曲面'''という。 以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。 *'''球面'''(sphere) :高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。 *'''楕円面'''(ellipsoid) :楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。 *'''楕円拋物面'''(elliptic paraboloid) :楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。 *'''双曲拋物面'''(hyperbolic paraboloid) :双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。 *'''一葉双曲面'''(hyperboloid of one sheet) :楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。 *'''二葉双曲面'''(hyperboloid of two sheet) :楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。 *'''錐面'''(conical surface) :方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。 閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。 同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。 厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。 <small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small> 曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。 :パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math> :ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math> また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。 例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。 <math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。 これのベクトル方程式を求めてみよう。 :①<math>c=0</math>のとき ::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math> ::[1]<math>b=0</math>のとき :::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math> :::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math> :::<math>y=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math> ::[2]<math>b\neq0</math>のとき :::<math>x=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math> :②<math>c\neq0</math>のとき ::<math>x=t, y=u</math>と置換すると ::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math> ::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math> なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。 <math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。 <math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から :<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math> :<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math> ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。 これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。 接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。 曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。 三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。 モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。 以下、正則曲面のみ扱う。 <math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。 :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> 則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から :<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math> である。 これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。 {{定理|(曲面積)}} <math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br> 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は :<math>S=\iint_D \sqrt{EG-F^2}dtdu</math> {{定理終わり}} この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。 <math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。 具体的には、 :<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math> より :<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math> ここで合成関数の常微分公式より :<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math> なので :<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math> :<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math> よって :<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math> このように、線素は<math>\theta</math>のとり方に依存しない。 そこで、最後の式で右辺を二乗した :<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math> を<math>S</math>の'''第一基本形式'''と定める。 第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと :<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。 ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。 また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。 また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。 則ち、第一基本量が曲面の本質であると予想される。 <math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。 等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。 面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。 曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。 向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。 メビウスの帯が向き付け不能である証明を概説する。 :接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。// 四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。 2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、 #パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。 #この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。 #<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math> この2つは'''パラメータ変換で同値'''という。 このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。 任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。 向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。 外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。 <math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。 パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。 ===回転面=== ここでは三次元空間内の曲面について考える。 高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。 簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。 :任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。 :領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。 :則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。 纏めると以下のようになる。 {{定理|(回転面の方程式)}} <math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は :<math>z=f(\sqrt{x^2+y^2})</math> {{定理終わり}} <math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。 回転面に対し、元の曲線を'''母線'''という。 母線が直線である回転面は'''円錐'''である。 :<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は :<math>z=m\sqrt{x^2+y^2}+n</math> :<math>z-n = m\sqrt{x^2+y^2}</math> これを両辺二乗すると :<math>(z-n)^2=m^2x^2+m^2y^2</math> であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。 回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。 点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。 このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。 {{定理|(ロドリゲスの公式)}} :<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> {{定理終わり}} *証明 :<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math> :<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので ::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math> :<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より ::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math> :<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、 :<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から ::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> :これらを足して ::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>// この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。 また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。 ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。 :円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。 :ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は ::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math> :ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると ::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math> :なので、 ::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math> :円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので ::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math> :であり、 ::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math> :ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より ::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math> :このベクトルと軸ベクトルの内積をとると ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math> ::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math> :<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math> :則ち ::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>// 円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。 ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。 正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、 :<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので :<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> 則ち、ベクトル関数の全微分は微小回転で近似される。 オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと :<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math> これの両辺を<math>dt</math>で割って :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math> これは剛体の速度公式である。 ロドリゲスの公式の一次変換表記を考える。 <math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、 :<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math> :<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math> :<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると :<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、 :<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math> という表示を得る。 更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より :<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math> が成り立つので、最終的に :<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math> と二次の行列多項式で表示される。 なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。 ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。 先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。 <math>\mathbf{N}\boldsymbol{r}</math>を計算すると :<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math> 則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。 更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。 ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br> また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math> ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math> ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。 このことは以下の考え方でも求まる。<br> <math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は :<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math> ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので :<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math> これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、 :<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math> :<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math> :<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math> 則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。 更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。 これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。 補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。 ===種々の曲率=== ここでは三次元空間内の正則曲面について考える。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。 <math>C</math>の接ベクトルは合成関数微分公式より :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math> と表示される。 ここで両辺の<math>ds</math>を形式的に払うと :<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> これの自分自身との内積をとると :<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math> 弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると :<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math> と、第一基本形式を別の方法で得られた。 <math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで :<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math> :<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> :<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。 後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。 :<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math> ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。 <math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math> なので<math>ds</math>に関して形式的に通分して :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> 右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。 <math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math> また、<math>u</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math> ここから第二基本量は :<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math> とも表示され、第二基本形式の別表示 :<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> を得る。 これは更に全微分から微小ベクトル同士の内積として :<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math> とも書ける。 第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。 第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと :<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。 ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。 :<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに :<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math> :が判るので、 :<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math> これはヘッシアンを法線の長さで割った行列である。 則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。 実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。 このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。 ここで第二基本形式を定義した式 :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math> 右辺を形式的に<math>dt^2</math>で割ると :<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。 そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。 :<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> 法曲率の幾何学的意味を考える。 <math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。 則ち、法曲率は法曲線の曲率に対応する。 なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。 法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。 :法曲率の定義式より ::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*) :これが<math>k</math>の恒等式なので微分しても等号が成り立ち、 ::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math> :フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので ::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@) :が成り立つ必要がある。 :これを<math>k</math>倍して(*)を引くと ::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#) :これと(@)を連立して ::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math> :これを(#)に代入して ::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($) :という二次方程式を得る。 :($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。 :逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。// この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。 ($)の左辺を変形してみると、 :<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math> :<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math> :<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math> :<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math> :<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math> という、第一基本行列と第二基本行列を用いた形が出てきた。 ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して :<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math> これを二次形式表示すると :<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math> と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。 この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。 二つの主方向の関係を調べる。 :主方向の定義より ::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> :なので ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> :第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math> :上下の式の差をとって ::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math> :<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。 ::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math> :この二つのベクトルは主方向を向くので2つの主方向は直交する。 <math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。 上の結果から、'''臍点でない各点で2つの主方向は直交する'''。 主曲率に対して解と係数の関係から得る値 :<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math> をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。 全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。 そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。 ここで<math>\mathbf{S}</math>の固有方程式は :<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math> <math>\det\mathbf{K}^{-1}\neq0</math>より :<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math> これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。 則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。 更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。 {{定理|(ヴァインガルテンの式)}} :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> {{定理終わり}} *証明 :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。 :両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> :<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math> :<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>// 臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から :<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math> であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して :<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math> を得る。 <math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して :<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math> ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると :<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{T}</math> であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。 :<math>\mathbf{H}={}^t\!\mathbf{H}</math> より :<math>{}^t\!\mathbf{T}=\mathbf{T}</math> が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。 よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。 モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに :<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math> を得る。 等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。 ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。 具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。 主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。 任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。 平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。 極小曲面は表面張力の理論に応用されている。 例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。 曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。 最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。 :<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> :<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math> これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として :<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math> この<math>\mathbf{W}</math>を'''第三基本行列'''という。 見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。 臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。 このとき、各基本形式は :<math>I=dp^2+dq^2</math> :<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math> :<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math> と表示されることが知られている。 第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。 :<math>I\!I\!I=2HI\!I-KI</math> このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。 これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。 この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。 なお、平均曲率を考えるときは外側の空間の情報が必要である。 ==直交曲線座標系== {{節stub}} ===円筒座標系=== 平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。 空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。 円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。 そのため、円筒座標系と直交座標系の対応は以下のようになる。 :<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math> 但し、<math>r</math>は基準面の裏側では負とする。 直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。 :<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。 :<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。 :<math>z</math>曲線:<math>z</math>軸に平行な直線。 ここで、各曲線に沿った微小変化がどのように表されるか見ていく。 <math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。 <math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。 上で求めた関係式より :<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math> なので、 :<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> よって :<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math> 再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。 纏めると以下のようになる。 {| class="wikitable" | ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム |- |style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math> |- |style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math> |- |style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math> |} ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。 そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。 :<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math> :<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math> :<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math> これを一次変換の形式で表すと :<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math> となる。 このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。 なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。 逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。 回転行列は直交行列なので :<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math> であり、 :<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math> 円筒座標系は、[[電磁気学]]の解析でよく使用される。 例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。 ===極座標系=== 高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。 一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。 このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。 xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。 <math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。 <math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。 <math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。 逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。 <math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。 また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。 よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。 以上を纏めると、直交座標と球面座標の対応関係は :<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math> 一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。 直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。 :<math>r</math>曲線:原点を通る半直線。 :<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。 :<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。 各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて :<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math> と求まる。 これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により :<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math> と変換テンソルが求まる。 これも直交行列であるので、逆変換テンソルは :<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math> と求まる。 球面座標系は、[[古典力学]]の解析でよく使用される。 例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。 球面座標系は特に機械制御に応用されている。 円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。 ===円環座標系=== ===双極座標系=== ===回転放物面座標系=== ===放物柱座標系=== ===回転楕円面座標系=== ===楕円柱座標系=== ===楕円体座標系=== ==空間微分== ここでは三次元ユークリッド空間で考える。 ===勾配=== スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、 :<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math> を<math>\varphi</math>の'''勾配'''(gradient)と定義する。 勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。 勾配で定義される概念としては、電場が有名である。 :電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は :<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math> 勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。 '''空間偏微分演算子'''(ハミルトン演算子)を <math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math> と定義する。 この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。 <math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。 この演算子を用いれば勾配の表式は :<math>\mathrm{grad}\,\varphi=\nabla\varphi</math> となる。 <math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。 勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。 #<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性) #<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則) #<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分) #<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分) 任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。 以下、正則なスカラー場に限って扱う。 等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。 :<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。 :等位面の方程式を<math>t</math>で両辺微分して ::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math> :<math>t=t_0</math>のとき ::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math> ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。 よって等位面の接平面の方程式は :<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math> である。 スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は :<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math> これをベクトルの内積とみると :<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> :<math>=\nabla\varphi\cdot d\boldsymbol{x}</math> ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。 <math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。 このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数 :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math> を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。 方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。 :<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。 ::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math> ::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math> :ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば ::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math> ::<math>=\frac{d\Phi(t)}{dt}</math> ::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math> ::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math> ::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math> よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。 内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math> よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。 このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。 方向微分係数を'''方向導関数'''に拡張することを考える。 形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。 :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math> 正式には極限を用いて :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math> と定義する。 内積を書き下すと :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math> これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと :<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math> :<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math> となる。 則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。 更に、多変数関数のテイラー二次近似は :<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math> と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。 多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。 スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。 ベクトル場の全微分は :<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math> で定義された。 ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。 この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。 則ち、ベクトル場の全微分は :<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math> と表される。 これを形式的に :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math> と書き表すことができる。 則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。 ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。 ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math> が成り立つことが判る。 これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。 則ち、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> である。 ===発散=== ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、 :<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math> を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。 発散が用いられる概念としては、'''ガウスの法則'''が有名である。 :電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として :<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math> 球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では <math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。 勾配と同様に発散をナブラで表すことを考えると、 :<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math> という表式を得る。 <math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。 発散に対しては以下が成り立つ。 #<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性) #<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は内積の線型性より、後者は成分演算と勾配の定義より示される。 ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。 :<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math> ここで跡が発散そのものになっているので :<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> が成り立つ。 発散の物理的意味を考える。 :密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。 :点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。 :単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より ::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math> :<math>\delta x\to0</math>の極限で ::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math> :他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では ::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math> :よって単位体積当たりでは ::<math>\rho\nabla\cdot\boldsymbol{v}</math> :を得る。 ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。 この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。 発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。 また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。 ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。 位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。 :<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math> <math>y, z</math>も同様なので :<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math> よって発散のライプニッツ則から :<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math> この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。 ベクトル解析の黎明期では発散の逆符号で表される :<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math> という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。 ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。 ===回転=== 回転運動は、以下の3つにより一意に定まる。 *回転軸の方向 *回転の速さ *回転方向(軸に対して右回転か左回転か) 「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。 従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。 ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。 :<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> <math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。 <math>z</math>軸方向の成分について考える。 <math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。 ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。 対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。 これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。 回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。 :電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として :<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math> 流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。 回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。 勾配・発散と同様に空間偏微分演算子による表記を考える。 成分に着目すると外積の形式なので、 :<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math> と表されることが判る。 ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。 外積の性質から、回転は行列式 :<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math> でも表示される。 回転に対しては以下が成り立つ。 #<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性) #<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は外積の線型性より、後者は成分演算と勾配の定義より示される。 回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。 回転は、ヤコビ行列を用いると以下のように表される。 :<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> :ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。 ===ラプラシアン=== 上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。 二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。 :<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math> ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。 そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。 以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。 :<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math> 二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。 但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。 ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。 :<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math> スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。 勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。 ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。 :'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math> :'''ポアソン方程式''':<math>\text{∆}\varphi=f</math> :'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math> :'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math> :'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math> ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。 なお、ラプラス方程式の解を'''調和関数'''という。 <math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。 :<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math> ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。 実際には以下のように表示される。 :<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math> *証明 :対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。 ::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math> :より ::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math> :また、 ::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> :より ::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math> ::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math> :<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると ::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math> ::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial {y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math> ::<math>=\text{∆}a_x</math>// ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。 則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。 歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。 :<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math> これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。 これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。 また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は :<math>\text{⧠}\psi=-\mu^2\psi</math> というミンコフスキー空間上のヘルツホルム方程式と解釈される。 ===微分定理=== ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。 既に紹介したものを以下に並べる。 #勾配 #:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math> #:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>( #:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math> #:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math> #:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math> #:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> #発散 #:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math> #:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math> #:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> #回転 #:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math> #:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math> #:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> #ラプラシアン #:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math> #:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math> 二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。 <math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math> 次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。 スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math> :<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math> ベクトル場の発散はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math> ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math> :<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math> 則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。 一階の空間微分の結果に対してラプラシアンを考えてみる。 :<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math> :<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math> :<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math> ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。 則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。 :<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。 スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。 :<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すればいいので公式化する必要が無い。 :<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math> :<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math> :<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math> :<math>\nabla\times(\boldsymbol{a}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math> :<math>\boldsymbol{a}\times(\nabla\times\nabla)</math> :<math>\nabla\cdot(\nabla\times\nabla)</math> :<math>\nabla\times(\nabla\times\nabla)</math> は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br> また、三重積の公式はナブラを代入した時点で破綻する。 次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。 :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すれば良いので公式化する必要が無い。 :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math> 及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。 故に、ここで問題になるのは :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math> の扱いである。 これらには以下の公式が成り立つ。 :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math> ===ポテンシャル論=== ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか? ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば :<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math> という一階線型連立偏微分方程式となる。 この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。 そして、その形状を具体的に与えるのが次の定理である。 {{定理|(ポアンカレの補題1)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が単連結であることである。 {{定理終わり}} 証明は後述する。 この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。 保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math> :<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1) :これを<math>y</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math> :更に回転の条件から ::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math> :これが<math>a_y(x,y,z)</math>に等しいので ::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math> :これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。 :両辺を<math>y</math>で偏積分して ::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math> :これを(1)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2) :これを<math>z</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math> :更に回転の条件から ::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> ::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> :これが<math>a_z(x,y,z)</math>に等しいので ::<math>\frac{dh}{dz}=a_z(m,n,z)</math> :これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。 :両辺を<math>z</math>で常積分して ::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math> :これを(2)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>// ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。 ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか? これも同様に以下の定理で与えられる。 {{定理|(ポアンカレの補題2)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が'''可縮'''であることである。 {{定理終わり}} 証明は後述する。 ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。 ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math> :第一式より ::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math> :<math>y</math>で偏積分して ::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math> :ライプニッツの積分法則より ::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3) :第三式より ::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math> :<math>y</math>で偏積分して ::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math> :ライプニッツの積分法則より ::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math> :これと(3)を第二式に代入して ::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math> ::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math> ::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math> :よって ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4) :この右辺を<math>h(x, y, z)</math>とおくと ::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math> :なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。 :これは(4)の左辺が<math>y</math>に依存しないことと整合する。 :故に(4)は ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math> :という二変数の偏微分方程式に落ちる。 :この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。 :このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。 :一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので ::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math> :同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して ::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math> :を得る。 :これは全微分方程式が完全微分方程式である条件なので、 ::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math> :なるスカラー場<math>\Phi</math>が存在する。 :則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>// ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。 ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。 ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。 ポテンシャルに関連した定理として、以下が成り立つ。 {{定理|(ヘルツホルムの定理)}} ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。 則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math> を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。 {{定理終わり}} *証明 :ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math> :ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math> :発散の線型性より ::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math> :ここでポアンカレの補題2を用いて ::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>// この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。 広義ポテンシャルに対して :<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math> が成立する。 広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。 例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式) :<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math> をヘルツホルム分解とクーロンゲージ条件により解析すると :<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math> を得る。 更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。 ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。 *応用問題 *:真空のマクスウェル方程式<math> \begin{cases} \nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\ \nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\ \nabla\cdot\boldsymbol{D}&=0\\ \nabla\cdot\boldsymbol{B}&=0\\ \end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。 ==空間積分== ここでは三次元ユークリッド空間で考える。 ===線積分=== 偏積分 :<math>\int_a^b f(x,y) dx := \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k,y) \Delta x</math>(<math>\Delta x = \frac{b-a}{n}, x_k = a + k\Delta x</math>) は<math>xyz</math>空間を<math>y</math>を固定した平面で切った断面に於ける曲線<math>z=f(x, y)</math>と<math>x</math>軸、直線<math>x=a, x=b</math>の囲む符号付き面積であった。 このとき積分変数を各点で見ると<math>x</math>軸という直線上を<math>a\to b</math>と単調に進むことになるが、これを<math>xyz</math>空間の任意の曲線<math>C</math>に拡張することを考える。 三次元空間の曲線をベクトル表示すると :<math>\boldsymbol{r}(t)=\begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix}\quad t\in [\alpha, \beta]</math> であり、被積分関数はこの曲線上の点を入力とするスカラー場と考えられるので :<math>\varphi=\varphi(\boldsymbol{r})</math> 偏積分の<math>dx</math>は「<math>x</math>軸上の微小変位」であったが、<math>t</math>が単調なとき曲線に沿った微小変位は曲線上の移動距離、則ち弧長の微小量と考えられるので線素を用いて :<math>dl=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> これらを総合すると、<math>C</math>に沿った積分というものは曲線のパラメータを用いて :<math>\int_\alpha^\beta \varphi(\boldsymbol{r}(t))\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> と表示されることになる。 これをスカラー場<math>\varphi</math>の<math>C</math>に沿った'''線積分'''<sup>※</sup>(line integral)という。また、<math>C</math>を'''積分経路'''(積分路、path)という。 <small>※量子力学の[[量子力学#経路積分法|経路積分]](path integral)とは異なる概念である。</small> スカラー場の線積分は :<math>\int_C \varphi dl</math> のように略記される。 特に積分経路が閉曲線('''閉経路''')である場合は :<math>\oint_C \varphi dl</math> のように書き、これを<math>C</math>に沿った'''周回/閉路 積分'''(closed line integral)という。 <math>\varphi(\boldsymbol{r})</math>の<math>C</math>の端点に於ける値の差を考える。 <math>t\in[\alpha,\beta]</math>を各<math>t_i</math>に等分割したとき、スカラー関数のテイラー展開より :<math>\varphi(\boldsymbol{r}(t_i))-\varphi(\boldsymbol{r}(t_{i-1}))=\nabla\varphi(\boldsymbol{r}_{t_i-1})\cdot d\boldsymbol{r}\big|_{t=t_i}+O\left(\left\|d\boldsymbol{r}\big|_{t=t_i}\right\|\right)</math> なので :<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))\fallingdotseq \sum_{i=1}^n \nabla\varphi(\boldsymbol{r}(t_{i-1}))\cdot d\boldsymbol{r}\big|_{t=t_i}</math> 右辺で分割数<math>n</math>を無限大に飛ばした極限は区分求積法より :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r}</math> 則ち、曲線<math>C</math>に沿った微分積分学の基本定理 :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r} = \varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math> を得る。 これは一変数積分の<math>\int_a^b \frac{df}{dx}dx=f(b)-f(a)</math>に対応し、これは常積分に関する微分積分学の基本定理の別表現である。 左辺をスカラー場の線積分と同様に<math>\int_C \nabla\varphi\cdot d\boldsymbol{r}</math>と書くことにする。 ここで<math>\nabla\varphi</math>を一般のベクトル場<math>\boldsymbol{a}</math>に拡張して同様に :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}</math> を考えてみたい。 ここで<math>d\boldsymbol{r}</math>は<math>\boldsymbol{r}</math>の全微分と解釈され、一変数関数なので :<math>d\boldsymbol{r}=\frac{d\boldsymbol{r}}{dt}dt</math> 則ち、 :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}=\int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\cdot\frac{d\boldsymbol{r}}{dt}dt</math> という曲線のパラメータに関する積分に帰着された。 これをベクトル場<math>\boldsymbol{a}</math>の<math>C</math>に沿った'''線積分'''という。 <math>\frac{d\boldsymbol{r}}{dt}</math>は<math>C</math>の接線なので<math>\boldsymbol{a}(\boldsymbol{r})\cdot\frac{d\boldsymbol{r}}{dt}</math>は<math>\boldsymbol{a}</math>から<math>C</math>の接線に沿う沿流成分を取り出していることになる。 このことから、ベクトル場の線積分を特に'''接線積分'''(integral of tangential component)ということがある。 また、<math>d\boldsymbol{r}</math>のノルムを考えてみると :<math>\|d\boldsymbol{r}\|=\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt=dl</math> より線素に一致する。 このことから、<math>d\boldsymbol{r}</math>を'''線素ベクトル'''と呼び、<math>d\boldsymbol{l}</math>とも書く。 線素ベクトルは曲線上の微小変位を表すので座標軸上の微小変位の重ね合わせと考えれば :<math>d\boldsymbol{l}=\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> よって接線積分は形式的に :<math>\int_C (a_xdx+a_ydy+a_zdz)</math> とも書かれる。 更に、弧長パラメトライズされている場合は接ベクトルを用いて :<math>d\boldsymbol{l}=\boldsymbol{t}ds</math> とも表せる。 接線積分で定義される概念としては、仕事が有名である。 :物体を経路<math>C</math>に沿って力<math>\boldsymbol{F}</math>で運んだときの仕事は摩擦や空気抵抗を無視すると ::<math>W=\int_C \boldsymbol{F}\cdot d\boldsymbol{r}</math> また、アンペールの法則も線積分で示される。 :閉経路<math>C</math>で囲まれた領域を貫く電流の大きさ<math>I</math>とその電流が生む磁場<math>\boldsymbol{H}</math>に対して ::<math>\oint_C \boldsymbol{H}\cdot d\boldsymbol{l}=I</math> 更に、以下のような概念も定義されている。 :流体の速度場<math>\boldsymbol{v}</math>の循環は ::<math>\Gamma(C)=\oint_C \boldsymbol{v}\cdot d\boldsymbol{l}</math> *応用問題 **運ばれる物体の質量を<math>m</math>としたとき、仕事の定義とニュートンの運動方程式<math>m\frac{d^2\boldsymbol{r}}{dt^2}=\boldsymbol{F}</math>を用いて運動エネルギーに関するエネルギーの原理<math>W=\frac{1}{2}mv^2-\frac{1}{2}mv_0^2</math>を証明せよ。 <math>C</math>が正の向きにパラメトライズされたとき、負の向きにパラメトライズされた曲線を<math>-C</math>と表した。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の始点が一致するとき、これを一つの曲線と見做して曲線の和 :<math>C_1+C_2</math> が定義される。 これを'''区分的に定義された曲線'''という。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の終点が一致するとき、<math>C_1</math>を始点とすると曲線の差は :<math>C_1-C_2=C_1+(-C_2)</math> で定義される。 <math>C</math>が'''区分的に滑らか'''であるとは、<math>C</math>が有限個の滑らかな曲線の和であることである。 これらを踏まえると、線積分には以下の性質が成り立つ。 #スカラー場 #:<math>\int_C (k\varphi+l\psi) dl=k\int_C \varphi dl + l \int_C \psi dl</math> #:<math>\int_{-C}\varphi dl = -\int_C \varphi dl</math> #:<math>\int_{C_1+C_2}\varphi dl = \int_{C_1}\varphi dl + \int_{C_2}\varphi dl</math> #ベクトル場 #:<math>\int_C (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{l}=k\int_C \boldsymbol{a}\cdot d\boldsymbol{l}+l\int_C \boldsymbol{b}\cdot d\boldsymbol{l}</math> #:<math>\int_{-C}\boldsymbol{a}\cdot d\boldsymbol{l} = -\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math> #:<math>\int_{C_1+C_2}\boldsymbol{a}\cdot d\boldsymbol{l} = \int_{C_1}\boldsymbol{a}\cdot d\boldsymbol{l} + \int_{C_2}\boldsymbol{a}\cdot d\boldsymbol{l}</math> 1番目の性質は線型性である。2番目の性質から、パラメータの変数変換('''再パラメトライズ''')が向き付けを保つときに線積分の値が保存されることが判る。 保存的ベクトル場に対する線積分<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>はスカラーポテンシャル<math>\varphi</math>を用いて<math>\int_C \nabla\varphi\cdot d\boldsymbol{l}</math>と書けるので微分積分学の基本定理より<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>に等しい。 ここで<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>は曲線の端点にのみ依存し形状には依存しない。 そのため、'''線積分の値が積分経路に依存しない必要十分条件はベクトル場が保存的であること'''である。 ここで閉曲線である場合を考えると :<math>\boldsymbol{r}(\alpha)=\boldsymbol{r}(\beta)</math> より :<math>\varphi(\boldsymbol{r}(\alpha))=\varphi(\boldsymbol{r}(\beta))</math> なので :<math>\oint_C \nabla\varphi\cdot d\boldsymbol{l}=0</math> である。 逆に言うと、'''周回積分が0でない閉経路をとれるとき<math>\varphi</math>は<math>\boldsymbol{a}</math>のスカラーポテンシャルではない'''。 この事実は偏微分方程式を解いて求めたスカラーポテンシャルが実際にポテンシャルであるかどうかの確認に用いられる。 なお、先程求めたスカラーポテンシャルの一般式 :<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math> は線積分で表される。 具体的には、積分経路を<math>\gamma:(m,n,l)\to(m,n,z)\to(m,y,z)\to(x,y,z)</math>という3つの線分の和としてとれば :<math>\varphi=\int_\gamma \boldsymbol{a}\cdot d\boldsymbol{l}+C</math> である。 ここでスカラーポテンシャルとは勾配方程式 :<math>\nabla\varphi=\boldsymbol{a}</math> の解だったので、'''線積分と勾配は逆演算'''である。 仕事が線積分で定義されるという話をしたが、エネルギーの原理より力場がスカラーポテンシャルを有する(保存場)場合はエネルギー変化が移動経路に依存しないので力学的エネルギー保存法則が成り立つ。これが高校物理で扱った「保存力なら力学エネルギーが保存する」ことの正式な表現である。 ベクトル場の線積分はベクトル場と線素ベクトルの内積をとって積分していたが、外積をとって積分することもできる。 具体的には、 :<math>\boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} a_ydz-a_zdy \\ a_zdx-a_xdz \\ a_xdy-a_ydx \end{pmatrix}</math> より :<math>\int_C \boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} \int_C (a_ydz-a_zdy) \\ \int_C (a_zdx-a_xdz) \\ \int_C (a_xdy-a_ydx) \end{pmatrix}</math> :<math>=\begin{pmatrix} \int_\alpha^\beta \left\{ a_y(\boldsymbol{r}(t))\frac{dz}{dt}-a_z(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_z(\boldsymbol{r}(t))\frac{dx}{dt}-a_x(\boldsymbol{r}(t))\frac{dz}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_x(\boldsymbol{r}(t))\frac{dy}{dt}-a_y(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \end{pmatrix}</math> これは物理学的にはビオ・サヴァールの法則の記述に用いられている。 :真空中で経路<math>C</math>を正の向きに流れる強さ<math>I</math>の定常電流・<math>C</math>上にない点<math>\mathrm{P}</math>・<math>C</math>上の点<math>\mathrm{Q}</math>に対し、<math>C</math>全体で生じる磁束密度<math>\boldsymbol{B}</math>の<math>\mathrm{P}</math>での値は真空の透磁率<math>\mu_0</math>として ::<math>\boldsymbol{B}(\mathrm{P})=\frac{\mu_0 I}{4\pi}\int_C \frac{\overrightarrow{\mathrm{PQ}}\times d\boldsymbol{l}}{\|\overrightarrow{\mathrm{PQ}}\|^3}</math> ===面積分=== ===体積分=== ===積分定理=== ==発展事項== {{節stub}} {{Advanced|多様体論}} {{Advanced|微分幾何学}} {{Advanced|積分幾何学}} ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。 ===体積分再考=== 体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。 線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。 1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。 線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。 媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。 体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。 全微分を一次変換表記すると :<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。 そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。 '''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。 そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。 これは正方行列ならヤコビアンの絶対値に一致する。 {{NavTop|title=補足:体積拡大率に一致する証明}} :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math> よって :<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math> :<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math> :<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列) :<math>=\mathbf{R}^*\mathbf{R}</math> :<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math> <math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/> 則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。// {{NavBottom}} よって体積分は :<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math> ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。 実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。 なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。 実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。 ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。 ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。 :<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。 つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。 ※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。 ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。 ===多様体=== ===微分形式=== [[線型代数学続論/外積代数]]も参照。 ===リーマン計量=== ===テンソル解析=== [[線型代数学続論/テンソル代数]]も参照。 ===複素ベクトル解析=== [[複素解析学]]も参照。 {{DEFAULTSORT:へくとるかいせき}} [[Category:解析学]] [[Category:微分積分学]] [[Category:ベクトル解析|かいせきかくきそ]] ev8be81nv930y06e7iab51oy7qwmhtt 304596 304595 2026-10-11T05:28:36Z ~2026-53216-21 92705 /* 線積分 */ 304596 wikitext text/x-wiki {{Pathnav|数学|解析学|解析学基礎|frame=1}} {{wikipedia|ベクトル解析}} ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。 ==前提知識== ここでは、実数のみで考える。 ===ベクトル=== [[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。 ===行列=== [[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。 ===多変数解析=== [[解析学基礎/多変数関数の微積分]]を参照。 ===領域=== <math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。 <math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。 注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。 <math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。 閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。 集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、 #<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math> #<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math> 「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。 空でない開連結集合を'''領域'''という。 実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。 ===右手系=== 三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。 右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。 外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。 系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。 位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。 偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。 :(軸性)×(軸性)=(軸性) :(軸性)×(極性)=(極性) :(極性)×(極性)=(軸性) ==基礎事項== ===ベクトル関数=== 関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。 ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。 ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。 例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、 :<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性) :<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math> :<math>=\boldsymbol{e}_x</math> と求まる。 このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。 また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は :<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math> :<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性) :<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math> である。 この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。 高階導関数・高階微分可能も同様にして定義される。 <math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。 高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。 例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。 曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。 例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。 1変数ベクトル関数の微分に関して、以下の公式が成り立つ。 #定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math> #和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math> #積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math> #商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math> #内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math> #外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math> #スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math> ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に :<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math> で与えられる。 つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。 ここで、このスカラー関数が定数関数である条件に就て見てみよう。 :<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して :<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math> :両辺微分すると内積の微分より :<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :逆に、 :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math> :<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math> :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数) :<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より :<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math> よって、以下が成り立つ。 {{定理|(直交条件の定理)}} :<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math> {{定理終わり}} これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。 また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。 :所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。 :両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math> :ここで元のベクトル関数との外積をとると :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math> :逆に、 :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので :<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。 :各成分ごとに微分方程式を解くと、 ::これは変数分離型微分方程式なので第i成分は ::<math>\frac{df_i}{dx}=g(x)f_i(x)</math> ::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math> ::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math> ::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math> :よって :<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math> :ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと :<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る// よって、以下が成り立つ。 {{定理|(平行条件の定理)}} <math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として :<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math> {{定理終わり}} ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。 一般次元では外積に代わって次の関係式を用いる。 :<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math> これはCS不等式の等号成立の場合である。 実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は :<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math> であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/> 平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。// 補足として、力学への応用を考える。 :速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると :<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math> :よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。 :これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。 :平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。 :円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると ::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math> :もう一度微分して ::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math> :則ち ::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math> :位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので ::<math>\lambda r^2 + v^2 = 0</math> ::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math> :則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。// なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。 <math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として :<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル) と表される。 また、定積分は :<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math> と表される。 1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。 #定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math> #和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math> #内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math> #外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math> #スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math> #内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math> #外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math> #置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math> 平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。 :1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。 :第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、 :両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで :<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。 :よって一般解は :<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math> ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。 例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して :<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math> と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。 また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。 一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。 この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。 また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。 ===ベクトル場・スカラー場=== 写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。 実際には<math>m=n</math>の場合を考えることが多い。 写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。 それぞれ上で述べたベクトル関数・スカラー関数に対応する。 もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると :スカラー場:<math>\varphi=\varphi(p)</math> :ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math> のように場は「点を入力とする<sup>※</sup>関数」である。 <small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small> ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。 則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。 ここで、二変数関数の極値を思い返してみる。 <math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として :<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math> という定義だった。 <math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。 ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。 なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。 ベクトル場の例としては、電場・磁場・重力場などが挙げられる。 スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。 例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。 ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。 例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について :<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。 これは、ベクトル場の加法の定義が :<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math> となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。 曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。 ==曲線論・曲面論== ===曲線=== <math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。 例えば円を陽関数表示しようとすると :<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて :<math>y=\pm\sqrt{r^2-x^2}</math> 則ち :<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math> という多価関数が必要になる。 これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。 しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。 :<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲) こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。 一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。 ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。 例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。 パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。 パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。 <small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small> <math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。 滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。 <math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。 速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。 なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。 正則な曲線に対して曲線長('''弧長''')を考える。 二次元曲線の場合は数学Ⅲで既に扱った。 :<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math> 実は、これを一般の<math>n</math>次元にそのまま拡張することができる。 {{定理|(弧長公式)}} 曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> で与えられる。 {{定理終わり}} *証明 :<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。 :<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。 :ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より ::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math> :分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので ::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math> :区分求積法より最後の無限級数は収束して :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>// ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。 1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。 曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。 通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。 また、弧長パラメータ表示で連鎖律を適用すると :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math> ここで微分積分学の基本定理より :<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math> なので :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math> であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。 よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。 弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。 <math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は :<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math> と表される。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math> であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。 領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。 例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、 :定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math> :合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math> :<math>\int y dy=\int xdx</math> :<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math> :よって双曲線<math>y^2-x^2=2C</math>// この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで :<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。 「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。 有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。 流線の微分方程式を弧長パラメータ表示を用いて変形する。 :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて :<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math> 元の方程式の両辺でノルムをとると :<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> 代入して :<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> :<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math> ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。 ===フレネ標搆=== ここでは、三次元空間に於ける正則曲線について考える。 <math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。 先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。 主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。 <math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。 即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。 平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで :法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math> :展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math> :接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math> とわかる。 <math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。 主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。 なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。 単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。 ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。 単位従法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので :<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので :<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math> 外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より :<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math> となるスカラー関数<math>\tau(s)</math>が存在する。 この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。 <math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。 単位主法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math> ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して :<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math> よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。 :<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math> これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。 {{定理|(フレネ=セレーの公式)}} :<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math> {{定理終わり}} 表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。 捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。 例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。 :媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math> :接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math> :弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math> :<math>\therefore t=\frac{s}{a}</math> :<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math> :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math> :<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math> :<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math> :<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>// フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。 従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。 {{定理|(曲線の基本定理)}} 開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/> このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。 {{定理終わり}} 剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。 <math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。 例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。 <math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲) だったが、二次近似式(三次以降を切り捨てた式)を考えると :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math> フレネ標搆を用いて書き直すと :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math> 二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/> 接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は :<math>x^2+(y-R)^2=R^2</math> :<math>y=R-\sqrt{R^2-x^2}</math> テイラー展開して :<math>y=\frac{x^2}{2R}+O(x^4)</math> 二次の項を比較すると :<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math> よって :<math>R=\frac{1}{\kappa}</math> と定義するのは妥当である。 なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。 フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。 ===単純閉曲線=== パラメータ区間を<math>I=[a, b]</math>とする。 このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。 端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。 自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。 幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。 このことは以下の定理によって保証される。 {{定理|(ジョルダンの曲線定理)}} 平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。 {{定理終わり}} この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。 正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。 ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。 主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。 ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。 <math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。 ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。 任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。 つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。 集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。 弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。 平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。 なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。 集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。 集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。 単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。 曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。 例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。 実は、この事実は楕円に限らないことが以下の定理で示される。 {{定理|(ムコパディヤーヤの定理・四頂点定理)}} <math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。 {{定理終わり}} *証明 :滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。 :卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。 :曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。 :曲率関数が定数関数でないとする。 :ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。 :従って少なくとも2つの頂点を持つ。 :ここで、頂点がこの2つのみと仮定する。 :曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。 :線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。 :<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、 :<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。 :同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。 :従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。 :<math>y(a)=y(b)=0</math>に注意すると部分積分して :<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math> :主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので :<math>\xi'_2(s)=-\kappa(s)y'(s)</math> :よって :<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math> :なので矛盾した不等式<math>0<0</math>を得る。 :則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。 :そのような点を<math>\mathrm{L}</math>と置く。 :<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。 :このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので :<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。 :同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。 :この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。 :よって、頂点個数の最小値は<math>4</math>である。// 最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。 この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。 先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して :<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math> :<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math> ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/> 一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。 ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。 <math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として :<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math> ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。 閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。 ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。 <small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small> 弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。 従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math> この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。 曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した :<math>\mu:=\int_a^b |\kappa(s)|ds</math> という量を考えることにする。 これを閉曲線の'''全曲率'''と呼ぶ。 全曲率に対して以下の定理が成り立つ。 {{定理|(フェンヒェルの定理)}} 滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。 {{定理終わり}} 証明は省略する。 ===曲面=== 多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。 一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。 二次式で陰関数表示される曲面を'''二次曲面'''という。 以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。 *'''球面'''(sphere) :高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。 *'''楕円面'''(ellipsoid) :楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。 *'''楕円拋物面'''(elliptic paraboloid) :楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。 *'''双曲拋物面'''(hyperbolic paraboloid) :双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。 *'''一葉双曲面'''(hyperboloid of one sheet) :楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。 *'''二葉双曲面'''(hyperboloid of two sheet) :楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。 *'''錐面'''(conical surface) :方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。 閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。 同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。 厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。 <small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small> 曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。 :パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math> :ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math> また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。 例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。 <math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。 これのベクトル方程式を求めてみよう。 :①<math>c=0</math>のとき ::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math> ::[1]<math>b=0</math>のとき :::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math> :::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math> :::<math>y=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math> ::[2]<math>b\neq0</math>のとき :::<math>x=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math> :②<math>c\neq0</math>のとき ::<math>x=t, y=u</math>と置換すると ::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math> ::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math> なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。 <math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。 <math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から :<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math> :<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math> ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。 これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。 接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。 曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。 三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。 モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。 以下、正則曲面のみ扱う。 <math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。 :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> 則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から :<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math> である。 これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。 {{定理|(曲面積)}} <math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br> 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は :<math>S=\iint_D \sqrt{EG-F^2}dtdu</math> {{定理終わり}} この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。 <math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。 具体的には、 :<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math> より :<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math> ここで合成関数の常微分公式より :<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math> なので :<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math> :<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math> よって :<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math> このように、線素は<math>\theta</math>のとり方に依存しない。 そこで、最後の式で右辺を二乗した :<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math> を<math>S</math>の'''第一基本形式'''と定める。 第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと :<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。 ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。 また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。 また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。 則ち、第一基本量が曲面の本質であると予想される。 <math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。 等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。 面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。 曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。 向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。 メビウスの帯が向き付け不能である証明を概説する。 :接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。// 四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。 2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、 #パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。 #この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。 #<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math> この2つは'''パラメータ変換で同値'''という。 このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。 任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。 向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。 外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。 <math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。 パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。 ===回転面=== ここでは三次元空間内の曲面について考える。 高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。 簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。 :任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。 :領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。 :則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。 纏めると以下のようになる。 {{定理|(回転面の方程式)}} <math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は :<math>z=f(\sqrt{x^2+y^2})</math> {{定理終わり}} <math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。 回転面に対し、元の曲線を'''母線'''という。 母線が直線である回転面は'''円錐'''である。 :<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は :<math>z=m\sqrt{x^2+y^2}+n</math> :<math>z-n = m\sqrt{x^2+y^2}</math> これを両辺二乗すると :<math>(z-n)^2=m^2x^2+m^2y^2</math> であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。 回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。 点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。 このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。 {{定理|(ロドリゲスの公式)}} :<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> {{定理終わり}} *証明 :<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math> :<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので ::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math> :<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より ::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math> :<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、 :<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から ::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> :これらを足して ::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>// この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。 また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。 ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。 :円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。 :ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は ::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math> :ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると ::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math> :なので、 ::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math> :円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので ::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math> :であり、 ::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math> :ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より ::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math> :このベクトルと軸ベクトルの内積をとると ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math> ::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math> :<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math> :則ち ::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>// 円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。 ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。 正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、 :<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので :<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> 則ち、ベクトル関数の全微分は微小回転で近似される。 オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと :<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math> これの両辺を<math>dt</math>で割って :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math> これは剛体の速度公式である。 ロドリゲスの公式の一次変換表記を考える。 <math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、 :<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math> :<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math> :<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると :<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、 :<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math> という表示を得る。 更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より :<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math> が成り立つので、最終的に :<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math> と二次の行列多項式で表示される。 なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。 ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。 先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。 <math>\mathbf{N}\boldsymbol{r}</math>を計算すると :<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math> 則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。 更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。 ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br> また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math> ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math> ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。 このことは以下の考え方でも求まる。<br> <math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は :<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math> ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので :<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math> これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、 :<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math> :<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math> :<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math> 則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。 更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。 これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。 補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。 ===種々の曲率=== ここでは三次元空間内の正則曲面について考える。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。 <math>C</math>の接ベクトルは合成関数微分公式より :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math> と表示される。 ここで両辺の<math>ds</math>を形式的に払うと :<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> これの自分自身との内積をとると :<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math> 弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると :<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math> と、第一基本形式を別の方法で得られた。 <math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで :<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math> :<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> :<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。 後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。 :<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math> ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。 <math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math> なので<math>ds</math>に関して形式的に通分して :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> 右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。 <math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math> また、<math>u</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math> ここから第二基本量は :<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math> とも表示され、第二基本形式の別表示 :<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> を得る。 これは更に全微分から微小ベクトル同士の内積として :<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math> とも書ける。 第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。 第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと :<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。 ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。 :<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに :<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math> :が判るので、 :<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math> これはヘッシアンを法線の長さで割った行列である。 則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。 実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。 このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。 ここで第二基本形式を定義した式 :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math> 右辺を形式的に<math>dt^2</math>で割ると :<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。 そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。 :<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> 法曲率の幾何学的意味を考える。 <math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。 則ち、法曲率は法曲線の曲率に対応する。 なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。 法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。 :法曲率の定義式より ::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*) :これが<math>k</math>の恒等式なので微分しても等号が成り立ち、 ::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math> :フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので ::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@) :が成り立つ必要がある。 :これを<math>k</math>倍して(*)を引くと ::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#) :これと(@)を連立して ::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math> :これを(#)に代入して ::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($) :という二次方程式を得る。 :($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。 :逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。// この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。 ($)の左辺を変形してみると、 :<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math> :<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math> :<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math> :<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math> :<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math> という、第一基本行列と第二基本行列を用いた形が出てきた。 ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して :<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math> これを二次形式表示すると :<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math> と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。 この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。 二つの主方向の関係を調べる。 :主方向の定義より ::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> :なので ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> :第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math> :上下の式の差をとって ::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math> :<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。 ::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math> :この二つのベクトルは主方向を向くので2つの主方向は直交する。 <math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。 上の結果から、'''臍点でない各点で2つの主方向は直交する'''。 主曲率に対して解と係数の関係から得る値 :<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math> をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。 全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。 そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。 ここで<math>\mathbf{S}</math>の固有方程式は :<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math> <math>\det\mathbf{K}^{-1}\neq0</math>より :<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math> これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。 則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。 更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。 {{定理|(ヴァインガルテンの式)}} :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> {{定理終わり}} *証明 :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。 :両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> :<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math> :<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>// 臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から :<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math> であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して :<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math> を得る。 <math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して :<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math> ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると :<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{T}</math> であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。 :<math>\mathbf{H}={}^t\!\mathbf{H}</math> より :<math>{}^t\!\mathbf{T}=\mathbf{T}</math> が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。 よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。 モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに :<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math> を得る。 等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。 ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。 具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。 主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。 任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。 平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。 極小曲面は表面張力の理論に応用されている。 例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。 曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。 最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。 :<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> :<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math> これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として :<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math> この<math>\mathbf{W}</math>を'''第三基本行列'''という。 見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。 臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。 このとき、各基本形式は :<math>I=dp^2+dq^2</math> :<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math> :<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math> と表示されることが知られている。 第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。 :<math>I\!I\!I=2HI\!I-KI</math> このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。 これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。 この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。 なお、平均曲率を考えるときは外側の空間の情報が必要である。 ==直交曲線座標系== {{節stub}} ===円筒座標系=== 平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。 空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。 円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。 そのため、円筒座標系と直交座標系の対応は以下のようになる。 :<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math> 但し、<math>r</math>は基準面の裏側では負とする。 直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。 :<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。 :<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。 :<math>z</math>曲線:<math>z</math>軸に平行な直線。 ここで、各曲線に沿った微小変化がどのように表されるか見ていく。 <math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。 <math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。 上で求めた関係式より :<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math> なので、 :<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> よって :<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math> 再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。 纏めると以下のようになる。 {| class="wikitable" | ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム |- |style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math> |- |style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math> |- |style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math> |} ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。 そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。 :<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math> :<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math> :<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math> これを一次変換の形式で表すと :<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math> となる。 このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。 なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。 逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。 回転行列は直交行列なので :<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math> であり、 :<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math> 円筒座標系は、[[電磁気学]]の解析でよく使用される。 例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。 ===極座標系=== 高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。 一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。 このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。 xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。 <math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。 <math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。 <math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。 逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。 <math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。 また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。 よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。 以上を纏めると、直交座標と球面座標の対応関係は :<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math> 一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。 直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。 :<math>r</math>曲線:原点を通る半直線。 :<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。 :<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。 各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて :<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math> と求まる。 これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により :<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math> と変換テンソルが求まる。 これも直交行列であるので、逆変換テンソルは :<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math> と求まる。 球面座標系は、[[古典力学]]の解析でよく使用される。 例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。 球面座標系は特に機械制御に応用されている。 円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。 ===円環座標系=== ===双極座標系=== ===回転放物面座標系=== ===放物柱座標系=== ===回転楕円面座標系=== ===楕円柱座標系=== ===楕円体座標系=== ==空間微分== ここでは三次元ユークリッド空間で考える。 ===勾配=== スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、 :<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math> を<math>\varphi</math>の'''勾配'''(gradient)と定義する。 勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。 勾配で定義される概念としては、電場が有名である。 :電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は :<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math> 勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。 '''空間偏微分演算子'''(ハミルトン演算子)を <math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math> と定義する。 この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。 <math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。 この演算子を用いれば勾配の表式は :<math>\mathrm{grad}\,\varphi=\nabla\varphi</math> となる。 <math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。 勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。 #<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性) #<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則) #<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分) #<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分) 任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。 以下、正則なスカラー場に限って扱う。 等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。 :<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。 :等位面の方程式を<math>t</math>で両辺微分して ::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math> :<math>t=t_0</math>のとき ::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math> ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。 よって等位面の接平面の方程式は :<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math> である。 スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は :<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math> これをベクトルの内積とみると :<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> :<math>=\nabla\varphi\cdot d\boldsymbol{x}</math> ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。 <math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。 このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数 :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math> を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。 方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。 :<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。 ::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math> ::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math> :ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば ::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math> ::<math>=\frac{d\Phi(t)}{dt}</math> ::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math> ::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math> ::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math> よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。 内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math> よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。 このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。 方向微分係数を'''方向導関数'''に拡張することを考える。 形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。 :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math> 正式には極限を用いて :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math> と定義する。 内積を書き下すと :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math> これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと :<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math> :<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math> となる。 則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。 更に、多変数関数のテイラー二次近似は :<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math> と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。 多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。 スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。 ベクトル場の全微分は :<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math> で定義された。 ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。 この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。 則ち、ベクトル場の全微分は :<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math> と表される。 これを形式的に :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math> と書き表すことができる。 則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。 ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。 ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math> が成り立つことが判る。 これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。 則ち、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> である。 ===発散=== ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、 :<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math> を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。 発散が用いられる概念としては、'''ガウスの法則'''が有名である。 :電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として :<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math> 球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では <math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。 勾配と同様に発散をナブラで表すことを考えると、 :<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math> という表式を得る。 <math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。 発散に対しては以下が成り立つ。 #<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性) #<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は内積の線型性より、後者は成分演算と勾配の定義より示される。 ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。 :<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math> ここで跡が発散そのものになっているので :<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> が成り立つ。 発散の物理的意味を考える。 :密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。 :点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。 :単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より ::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math> :<math>\delta x\to0</math>の極限で ::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math> :他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では ::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math> :よって単位体積当たりでは ::<math>\rho\nabla\cdot\boldsymbol{v}</math> :を得る。 ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。 この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。 発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。 また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。 ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。 位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。 :<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math> <math>y, z</math>も同様なので :<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math> よって発散のライプニッツ則から :<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math> この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。 ベクトル解析の黎明期では発散の逆符号で表される :<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math> という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。 ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。 ===回転=== 回転運動は、以下の3つにより一意に定まる。 *回転軸の方向 *回転の速さ *回転方向(軸に対して右回転か左回転か) 「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。 従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。 ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。 :<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> <math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。 <math>z</math>軸方向の成分について考える。 <math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。 ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。 対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。 これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。 回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。 :電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として :<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math> 流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。 回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。 勾配・発散と同様に空間偏微分演算子による表記を考える。 成分に着目すると外積の形式なので、 :<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math> と表されることが判る。 ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。 外積の性質から、回転は行列式 :<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math> でも表示される。 回転に対しては以下が成り立つ。 #<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性) #<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は外積の線型性より、後者は成分演算と勾配の定義より示される。 回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。 回転は、ヤコビ行列を用いると以下のように表される。 :<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> :ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。 ===ラプラシアン=== 上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。 二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。 :<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math> ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。 そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。 以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。 :<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math> 二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。 但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。 ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。 :<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math> スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。 勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。 ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。 :'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math> :'''ポアソン方程式''':<math>\text{∆}\varphi=f</math> :'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math> :'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math> :'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math> ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。 なお、ラプラス方程式の解を'''調和関数'''という。 <math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。 :<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math> ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。 実際には以下のように表示される。 :<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math> *証明 :対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。 ::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math> :より ::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math> :また、 ::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> :より ::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math> ::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math> :<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると ::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math> ::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial {y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math> ::<math>=\text{∆}a_x</math>// ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。 則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。 歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。 :<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math> これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。 これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。 また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は :<math>\text{⧠}\psi=-\mu^2\psi</math> というミンコフスキー空間上のヘルツホルム方程式と解釈される。 ===微分定理=== ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。 既に紹介したものを以下に並べる。 #勾配 #:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math> #:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>( #:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math> #:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math> #:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math> #:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> #発散 #:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math> #:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math> #:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> #回転 #:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math> #:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math> #:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> #ラプラシアン #:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math> #:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math> 二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。 <math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math> 次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。 スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math> :<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math> ベクトル場の発散はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math> ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math> :<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math> 則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。 一階の空間微分の結果に対してラプラシアンを考えてみる。 :<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math> :<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math> :<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math> ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。 則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。 :<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。 スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。 :<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すればいいので公式化する必要が無い。 :<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math> :<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math> :<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math> :<math>\nabla\times(\boldsymbol{a}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math> :<math>\boldsymbol{a}\times(\nabla\times\nabla)</math> :<math>\nabla\cdot(\nabla\times\nabla)</math> :<math>\nabla\times(\nabla\times\nabla)</math> は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br> また、三重積の公式はナブラを代入した時点で破綻する。 次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。 :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すれば良いので公式化する必要が無い。 :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math> 及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。 故に、ここで問題になるのは :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math> の扱いである。 これらには以下の公式が成り立つ。 :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math> ===ポテンシャル論=== ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか? ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば :<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math> という一階線型連立偏微分方程式となる。 この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。 そして、その形状を具体的に与えるのが次の定理である。 {{定理|(ポアンカレの補題1)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が単連結であることである。 {{定理終わり}} 証明は後述する。 この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。 保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math> :<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1) :これを<math>y</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math> :更に回転の条件から ::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math> :これが<math>a_y(x,y,z)</math>に等しいので ::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math> :これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。 :両辺を<math>y</math>で偏積分して ::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math> :これを(1)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2) :これを<math>z</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math> :更に回転の条件から ::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> ::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> :これが<math>a_z(x,y,z)</math>に等しいので ::<math>\frac{dh}{dz}=a_z(m,n,z)</math> :これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。 :両辺を<math>z</math>で常積分して ::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math> :これを(2)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>// ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。 ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか? これも同様に以下の定理で与えられる。 {{定理|(ポアンカレの補題2)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が'''可縮'''であることである。 {{定理終わり}} 証明は後述する。 ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。 ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math> :第一式より ::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math> :<math>y</math>で偏積分して ::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math> :ライプニッツの積分法則より ::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3) :第三式より ::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math> :<math>y</math>で偏積分して ::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math> :ライプニッツの積分法則より ::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math> :これと(3)を第二式に代入して ::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math> ::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math> ::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math> :よって ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4) :この右辺を<math>h(x, y, z)</math>とおくと ::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math> :なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。 :これは(4)の左辺が<math>y</math>に依存しないことと整合する。 :故に(4)は ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math> :という二変数の偏微分方程式に落ちる。 :この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。 :このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。 :一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので ::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math> :同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して ::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math> :を得る。 :これは全微分方程式が完全微分方程式である条件なので、 ::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math> :なるスカラー場<math>\Phi</math>が存在する。 :則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>// ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。 ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。 ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。 ポテンシャルに関連した定理として、以下が成り立つ。 {{定理|(ヘルツホルムの定理)}} ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。 則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math> を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。 {{定理終わり}} *証明 :ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math> :ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math> :発散の線型性より ::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math> :ここでポアンカレの補題2を用いて ::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>// この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。 広義ポテンシャルに対して :<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math> が成立する。 広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。 例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式) :<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math> をヘルツホルム分解とクーロンゲージ条件により解析すると :<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math> を得る。 更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。 ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。 *応用問題 *:真空のマクスウェル方程式<math> \begin{cases} \nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\ \nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\ \nabla\cdot\boldsymbol{D}&=0\\ \nabla\cdot\boldsymbol{B}&=0\\ \end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。 ==空間積分== ここでは三次元ユークリッド空間で考える。 ===線積分=== 偏積分 :<math>\int_a^b f(x,y) dx := \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k,y) \Delta x</math>(<math>\Delta x = \frac{b-a}{n}, x_k = a + k\Delta x</math>) は<math>xyz</math>空間を<math>y</math>を固定した平面で切った断面に於ける曲線<math>z=f(x, y)</math>と<math>x</math>軸、直線<math>x=a, x=b</math>の囲む符号付き面積であった。 このとき積分変数を各点で見ると<math>x</math>軸という直線上を<math>a\to b</math>と単調に進むことになるが、これを<math>xyz</math>空間の任意の曲線<math>C</math>に拡張することを考える。 三次元空間の曲線をベクトル表示すると :<math>\boldsymbol{r}(t)=\begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix}\quad t\in [\alpha, \beta]</math> であり、被積分関数はこの曲線上の点を入力とするスカラー場と考えられるので :<math>\varphi=\varphi(\boldsymbol{r})</math> 偏積分の<math>dx</math>は「<math>x</math>軸上の微小変位」であったが、<math>t</math>が単調なとき曲線に沿った微小変位は曲線上の移動距離、則ち弧長の微小量と考えられるので線素を用いて :<math>dl=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> これらを総合すると、<math>C</math>に沿った積分というものは曲線のパラメータを用いて :<math>\int_\alpha^\beta \varphi(\boldsymbol{r}(t))\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> と表示されることになる。 これをスカラー場<math>\varphi</math>の<math>C</math>に沿った'''線積分'''<sup>※</sup>(line integral)という。また、<math>C</math>を'''積分経路'''(積分路、path)という。 <small>※量子力学の[[量子力学#経路積分法|経路積分]](path integral)とは異なる概念である。</small> スカラー場の線積分は :<math>\int_C \varphi dl</math> のように略記される。 特に積分経路が閉曲線('''閉経路''')である場合は :<math>\oint_C \varphi dl</math> のように書き、これを<math>C</math>に沿った'''周回/閉路 積分'''(closed line integral)という。 1の線積分<math>\int_C dl</math>は弧長に等しい。 <math>\varphi(\boldsymbol{r})</math>の<math>C</math>の端点に於ける値の差を考える。 <math>t\in[\alpha,\beta]</math>を各<math>t_i</math>に等分割したとき、スカラー関数のテイラー展開より :<math>\varphi(\boldsymbol{r}(t_i))-\varphi(\boldsymbol{r}(t_{i-1}))=\nabla\varphi(\boldsymbol{r}_{t_i-1})\cdot d\boldsymbol{r}\big|_{t=t_i}+O\left(\left\|d\boldsymbol{r}\big|_{t=t_i}\right\|\right)</math> なので :<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))\fallingdotseq \sum_{i=1}^n \nabla\varphi(\boldsymbol{r}(t_{i-1}))\cdot d\boldsymbol{r}\big|_{t=t_i}</math> 右辺で分割数<math>n</math>を無限大に飛ばした極限は区分求積法より :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r}</math> 則ち、曲線<math>C</math>に沿った微分積分学の基本定理 :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r} = \varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math> を得る。 これは一変数積分の<math>\int_a^b \frac{df}{dx}dx=f(b)-f(a)</math>に対応し、これは常積分に関する微分積分学の基本定理の別表現である。 左辺をスカラー場の線積分と同様に<math>\int_C \nabla\varphi\cdot d\boldsymbol{r}</math>と書くことにする。 ここで<math>\nabla\varphi</math>を一般のベクトル場<math>\boldsymbol{a}</math>に拡張して同様に :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}</math> を考えてみたい。 ここで<math>d\boldsymbol{r}</math>は<math>\boldsymbol{r}</math>の全微分と解釈され、一変数関数なので :<math>d\boldsymbol{r}=\frac{d\boldsymbol{r}}{dt}dt</math> 則ち、 :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}=\int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\cdot\frac{d\boldsymbol{r}}{dt}dt</math> という曲線のパラメータに関する積分に帰着された。 これをベクトル場<math>\boldsymbol{a}</math>の<math>C</math>に沿った'''線積分'''という。 <math>\frac{d\boldsymbol{r}}{dt}</math>は<math>C</math>の接線なので<math>\boldsymbol{a}(\boldsymbol{r})\cdot\frac{d\boldsymbol{r}}{dt}</math>は<math>\boldsymbol{a}</math>から<math>C</math>の接線に沿う沿流成分を取り出していることになる。 このことから、ベクトル場の線積分を特に'''接線積分'''(integral of tangential component)ということがある。 また、<math>d\boldsymbol{r}</math>のノルムを考えてみると :<math>\|d\boldsymbol{r}\|=\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt=dl</math> より線素に一致する。 このことから、<math>d\boldsymbol{r}</math>を'''線素ベクトル'''と呼び、<math>d\boldsymbol{l}</math>とも書く。 線素ベクトルは曲線上の微小変位を表すので座標軸上の微小変位の重ね合わせと考えれば :<math>d\boldsymbol{l}=\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> よって接線積分は形式的に :<math>\int_C (a_xdx+a_ydy+a_zdz)</math> とも書かれる。 更に、弧長パラメトライズされている場合は接ベクトルを用いて :<math>d\boldsymbol{l}=\boldsymbol{t}ds</math> とも表せる。 接線積分で定義される概念としては、仕事が有名である。 :物体を経路<math>C</math>に沿って力<math>\boldsymbol{F}</math>で運んだときの仕事は摩擦や空気抵抗を無視すると ::<math>W=\int_C \boldsymbol{F}\cdot d\boldsymbol{r}</math> また、アンペールの法則も線積分で示される。 :閉経路<math>C</math>で囲まれた領域を貫く電流の大きさ<math>I</math>とその電流が生む磁場<math>\boldsymbol{H}</math>に対して ::<math>\oint_C \boldsymbol{H}\cdot d\boldsymbol{l}=I</math> 更に、以下のような概念も定義されている。 :流体の速度場<math>\boldsymbol{v}</math>の循環は ::<math>\Gamma(C)=\oint_C \boldsymbol{v}\cdot d\boldsymbol{l}</math> *応用問題 **運ばれる物体の質量を<math>m</math>としたとき、仕事の定義とニュートンの運動方程式<math>m\frac{d^2\boldsymbol{r}}{dt^2}=\boldsymbol{F}</math>を用いて運動エネルギーに関するエネルギーの原理<math>W=\frac{1}{2}mv^2-\frac{1}{2}mv_0^2</math>を証明せよ。 <math>C</math>が正の向きにパラメトライズされたとき、負の向きにパラメトライズされた曲線を<math>-C</math>と表した。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の始点が一致するとき、これを一つの曲線と見做して曲線の和 :<math>C_1+C_2</math> が定義される。 これを'''区分的に定義された曲線'''という。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の終点が一致するとき、<math>C_1</math>を始点とすると曲線の差は :<math>C_1-C_2=C_1+(-C_2)</math> で定義される。 <math>C</math>が'''区分的に滑らか'''であるとは、<math>C</math>が有限個の滑らかな曲線の和であることである。 これらを踏まえると、線積分には以下の性質が成り立つ。 #スカラー場 #:<math>\int_C (k\varphi+l\psi) dl=k\int_C \varphi dl + l \int_C \psi dl</math> #:<math>\int_{-C}\varphi dl = -\int_C \varphi dl</math> #:<math>\int_{C_1+C_2}\varphi dl = \int_{C_1}\varphi dl + \int_{C_2}\varphi dl</math> #ベクトル場 #:<math>\int_C (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{l}=k\int_C \boldsymbol{a}\cdot d\boldsymbol{l}+l\int_C \boldsymbol{b}\cdot d\boldsymbol{l}</math> #:<math>\int_{-C}\boldsymbol{a}\cdot d\boldsymbol{l} = -\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math> #:<math>\int_{C_1+C_2}\boldsymbol{a}\cdot d\boldsymbol{l} = \int_{C_1}\boldsymbol{a}\cdot d\boldsymbol{l} + \int_{C_2}\boldsymbol{a}\cdot d\boldsymbol{l}</math> 1番目の性質は線型性である。2番目の性質から、パラメータの変数変換('''再パラメトライズ''')が向き付けを保つときに線積分の値が保存されることが判る。 保存的ベクトル場に対する線積分<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>はスカラーポテンシャル<math>\varphi</math>を用いて<math>\int_C \nabla\varphi\cdot d\boldsymbol{l}</math>と書けるので微分積分学の基本定理より<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>に等しい。 ここで<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>は曲線の端点にのみ依存し形状には依存しない。 そのため、'''線積分の値が積分経路に依存しない必要十分条件はベクトル場が保存的であること'''である。 ここで閉曲線である場合を考えると :<math>\boldsymbol{r}(\alpha)=\boldsymbol{r}(\beta)</math> より :<math>\varphi(\boldsymbol{r}(\alpha))=\varphi(\boldsymbol{r}(\beta))</math> なので :<math>\oint_C \nabla\varphi\cdot d\boldsymbol{l}=0</math> である。 逆に言うと、'''周回積分が0でない閉経路をとれるとき<math>\varphi</math>は<math>\boldsymbol{a}</math>のスカラーポテンシャルではない'''。 この事実は偏微分方程式を解いて求めたスカラーポテンシャルが実際にポテンシャルであるかどうかの確認に用いられる。 なお、先程求めたスカラーポテンシャルの一般式 :<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math> は線積分で表される。 具体的には、積分経路を<math>\gamma:(m,n,l)\to(m,n,z)\to(m,y,z)\to(x,y,z)</math>という3つの線分の和としてとれば :<math>\varphi=\int_\gamma \boldsymbol{a}\cdot d\boldsymbol{l}+C</math> である。 ここでスカラーポテンシャルとは勾配方程式 :<math>\nabla\varphi=\boldsymbol{a}</math> の解だったので、'''線積分と勾配は逆演算'''である。 <math>\nabla\varphi\cdot d\boldsymbol{l}=d\varphi</math>より、スカラーポテンシャルの存在と完全微分方程式の対応がここからも得られる。また、完全微分方程式<math>d\varphi=0</math>の解は曲線を与えることも容易に判る。 仕事が線積分で定義されるという話をしたが、エネルギーの原理より力場がスカラーポテンシャルを有する(保存場)場合はエネルギー変化が移動経路に依存しないので力学的エネルギー保存法則が成り立つ。これが高校物理で扱った「保存力なら力学エネルギーが保存する」ことの正式な表現である。 ベクトル場の線積分はベクトル場と線素ベクトルの内積をとって積分していたが、外積をとって積分することもできる。 具体的には、 :<math>\boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} a_ydz-a_zdy \\ a_zdx-a_xdz \\ a_xdy-a_ydx \end{pmatrix}</math> より :<math>\int_C \boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} \int_C (a_ydz-a_zdy) \\ \int_C (a_zdx-a_xdz) \\ \int_C (a_xdy-a_ydx) \end{pmatrix}</math> :<math>=\begin{pmatrix} \int_\alpha^\beta \left\{ a_y(\boldsymbol{r}(t))\frac{dz}{dt}-a_z(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_z(\boldsymbol{r}(t))\frac{dx}{dt}-a_x(\boldsymbol{r}(t))\frac{dz}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_x(\boldsymbol{r}(t))\frac{dy}{dt}-a_y(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \end{pmatrix}</math> これは物理学的にはビオ・サヴァールの法則の記述に用いられている。 :真空中で経路<math>C</math>を正の向きに流れる強さ<math>I</math>の定常電流・<math>C</math>上にない点<math>\mathrm{P}</math>・<math>C</math>上の点<math>\mathrm{Q}</math>に対し、<math>C</math>全体で生じる磁束密度<math>\boldsymbol{B}</math>の<math>\mathrm{P}</math>での値は真空の透磁率<math>\mu_0</math>として ::<math>\boldsymbol{B}(\mathrm{P})=\frac{\mu_0 I}{4\pi}\int_C \frac{\overrightarrow{\mathrm{PQ}}\times d\boldsymbol{l}}{\|\overrightarrow{\mathrm{PQ}}\|^3}</math> ===面積分=== ===体積分=== ===積分定理=== ==発展事項== {{節stub}} {{Advanced|多様体論}} {{Advanced|微分幾何学}} {{Advanced|積分幾何学}} ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。 ===体積分再考=== 体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。 線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。 1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。 線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。 媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。 体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。 全微分を一次変換表記すると :<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。 そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。 '''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。 そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。 これは正方行列ならヤコビアンの絶対値に一致する。 {{NavTop|title=補足:体積拡大率に一致する証明}} :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math> よって :<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math> :<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math> :<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列) :<math>=\mathbf{R}^*\mathbf{R}</math> :<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math> <math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/> 則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。// {{NavBottom}} よって体積分は :<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math> ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。 実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。 なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。 実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。 ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。 ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。 :<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。 つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。 ※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。 ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。 ===多様体=== ===微分形式=== [[線型代数学続論/外積代数]]も参照。 ===リーマン計量=== ===テンソル解析=== [[線型代数学続論/テンソル代数]]も参照。 ===複素ベクトル解析=== [[複素解析学]]も参照。 {{DEFAULTSORT:へくとるかいせき}} [[Category:解析学]] [[Category:微分積分学]] [[Category:ベクトル解析|かいせきかくきそ]] 8gh65689u4byarzmbi4t1hm3sh53qn7 304598 304596 2026-10-11T05:29:20Z ~2026-53216-21 92705 /* 線積分 */ 304598 wikitext text/x-wiki {{Pathnav|数学|解析学|解析学基礎|frame=1}} {{wikipedia|ベクトル解析}} ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。 ==前提知識== ここでは、実数のみで考える。 ===ベクトル=== [[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。 ===行列=== [[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。 ===多変数解析=== [[解析学基礎/多変数関数の微積分]]を参照。 ===領域=== <math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。 <math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。 注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。 <math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。 閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。 集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、 #<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math> #<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math> 「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。 空でない開連結集合を'''領域'''という。 実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。 ===右手系=== 三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。 右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。 外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。 系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。 位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。 偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。 :(軸性)×(軸性)=(軸性) :(軸性)×(極性)=(極性) :(極性)×(極性)=(軸性) ==基礎事項== ===ベクトル関数=== 関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。 ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。 ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。 例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、 :<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性) :<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math> :<math>=\boldsymbol{e}_x</math> と求まる。 このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。 また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は :<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math> :<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性) :<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math> である。 この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。 高階導関数・高階微分可能も同様にして定義される。 <math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。 高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。 例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。 曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。 例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。 1変数ベクトル関数の微分に関して、以下の公式が成り立つ。 #定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math> #和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math> #積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math> #商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math> #内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math> #外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math> #スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math> ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に :<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math> で与えられる。 つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。 ここで、このスカラー関数が定数関数である条件に就て見てみよう。 :<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して :<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math> :両辺微分すると内積の微分より :<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :逆に、 :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math> :<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math> :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数) :<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より :<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math> よって、以下が成り立つ。 {{定理|(直交条件の定理)}} :<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math> {{定理終わり}} これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。 また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。 :所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。 :両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math> :ここで元のベクトル関数との外積をとると :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math> :逆に、 :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので :<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。 :各成分ごとに微分方程式を解くと、 ::これは変数分離型微分方程式なので第i成分は ::<math>\frac{df_i}{dx}=g(x)f_i(x)</math> ::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math> ::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math> ::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math> :よって :<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math> :ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと :<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る// よって、以下が成り立つ。 {{定理|(平行条件の定理)}} <math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として :<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math> {{定理終わり}} ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。 一般次元では外積に代わって次の関係式を用いる。 :<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math> これはCS不等式の等号成立の場合である。 実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は :<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math> であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/> 平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。// 補足として、力学への応用を考える。 :速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると :<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math> :よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。 :これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。 :平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。 :円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると ::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math> :もう一度微分して ::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math> :則ち ::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math> :位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので ::<math>\lambda r^2 + v^2 = 0</math> ::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math> :則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。// なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。 <math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として :<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル) と表される。 また、定積分は :<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math> と表される。 1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。 #定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math> #和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math> #内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math> #外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math> #スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math> #内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math> #外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math> #置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math> 平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。 :1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。 :第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、 :両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで :<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。 :よって一般解は :<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math> ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。 例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して :<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math> と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。 また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。 一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。 この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。 また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。 ===ベクトル場・スカラー場=== 写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。 実際には<math>m=n</math>の場合を考えることが多い。 写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。 それぞれ上で述べたベクトル関数・スカラー関数に対応する。 もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると :スカラー場:<math>\varphi=\varphi(p)</math> :ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math> のように場は「点を入力とする<sup>※</sup>関数」である。 <small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small> ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。 則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。 ここで、二変数関数の極値を思い返してみる。 <math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として :<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math> という定義だった。 <math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。 ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。 なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。 ベクトル場の例としては、電場・磁場・重力場などが挙げられる。 スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。 例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。 ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。 例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について :<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。 これは、ベクトル場の加法の定義が :<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math> となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。 曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。 ==曲線論・曲面論== ===曲線=== <math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。 例えば円を陽関数表示しようとすると :<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて :<math>y=\pm\sqrt{r^2-x^2}</math> 則ち :<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math> という多価関数が必要になる。 これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。 しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。 :<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲) こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。 一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。 ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。 例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。 パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。 パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。 <small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small> <math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。 滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。 <math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。 速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。 なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。 正則な曲線に対して曲線長('''弧長''')を考える。 二次元曲線の場合は数学Ⅲで既に扱った。 :<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math> 実は、これを一般の<math>n</math>次元にそのまま拡張することができる。 {{定理|(弧長公式)}} 曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> で与えられる。 {{定理終わり}} *証明 :<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。 :<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。 :ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より ::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math> :分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので ::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math> :区分求積法より最後の無限級数は収束して :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>// ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。 1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。 曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。 通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。 また、弧長パラメータ表示で連鎖律を適用すると :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math> ここで微分積分学の基本定理より :<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math> なので :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math> であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。 よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。 弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。 <math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は :<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math> と表される。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math> であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。 領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。 例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、 :定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math> :合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math> :<math>\int y dy=\int xdx</math> :<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math> :よって双曲線<math>y^2-x^2=2C</math>// この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで :<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。 「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。 有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。 流線の微分方程式を弧長パラメータ表示を用いて変形する。 :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて :<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math> 元の方程式の両辺でノルムをとると :<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> 代入して :<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> :<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math> ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。 ===フレネ標搆=== ここでは、三次元空間に於ける正則曲線について考える。 <math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。 先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。 主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。 <math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。 即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。 平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで :法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math> :展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math> :接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math> とわかる。 <math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。 主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。 なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。 単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。 ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。 単位従法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので :<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので :<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math> 外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より :<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math> となるスカラー関数<math>\tau(s)</math>が存在する。 この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。 <math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。 単位主法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math> ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して :<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math> よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。 :<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math> これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。 {{定理|(フレネ=セレーの公式)}} :<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math> {{定理終わり}} 表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。 捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。 例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。 :媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math> :接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math> :弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math> :<math>\therefore t=\frac{s}{a}</math> :<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math> :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math> :<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math> :<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math> :<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>// フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。 従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。 {{定理|(曲線の基本定理)}} 開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/> このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。 {{定理終わり}} 剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。 <math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。 例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。 <math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲) だったが、二次近似式(三次以降を切り捨てた式)を考えると :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math> フレネ標搆を用いて書き直すと :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math> 二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/> 接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は :<math>x^2+(y-R)^2=R^2</math> :<math>y=R-\sqrt{R^2-x^2}</math> テイラー展開して :<math>y=\frac{x^2}{2R}+O(x^4)</math> 二次の項を比較すると :<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math> よって :<math>R=\frac{1}{\kappa}</math> と定義するのは妥当である。 なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。 フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。 ===単純閉曲線=== パラメータ区間を<math>I=[a, b]</math>とする。 このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。 端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。 自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。 幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。 このことは以下の定理によって保証される。 {{定理|(ジョルダンの曲線定理)}} 平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。 {{定理終わり}} この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。 正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。 ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。 主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。 ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。 <math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。 ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。 任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。 つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。 集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。 弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。 平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。 なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。 集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。 集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。 単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。 曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。 例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。 実は、この事実は楕円に限らないことが以下の定理で示される。 {{定理|(ムコパディヤーヤの定理・四頂点定理)}} <math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。 {{定理終わり}} *証明 :滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。 :卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。 :曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。 :曲率関数が定数関数でないとする。 :ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。 :従って少なくとも2つの頂点を持つ。 :ここで、頂点がこの2つのみと仮定する。 :曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。 :線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。 :<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、 :<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。 :同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。 :従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。 :<math>y(a)=y(b)=0</math>に注意すると部分積分して :<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math> :主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので :<math>\xi'_2(s)=-\kappa(s)y'(s)</math> :よって :<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math> :なので矛盾した不等式<math>0<0</math>を得る。 :則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。 :そのような点を<math>\mathrm{L}</math>と置く。 :<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。 :このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので :<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。 :同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。 :この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。 :よって、頂点個数の最小値は<math>4</math>である。// 最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。 この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。 先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して :<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math> :<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math> ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/> 一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。 ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。 <math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として :<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math> ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。 閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。 ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。 <small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small> 弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。 従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math> この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。 曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した :<math>\mu:=\int_a^b |\kappa(s)|ds</math> という量を考えることにする。 これを閉曲線の'''全曲率'''と呼ぶ。 全曲率に対して以下の定理が成り立つ。 {{定理|(フェンヒェルの定理)}} 滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。 {{定理終わり}} 証明は省略する。 ===曲面=== 多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。 一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。 二次式で陰関数表示される曲面を'''二次曲面'''という。 以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。 *'''球面'''(sphere) :高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。 *'''楕円面'''(ellipsoid) :楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。 *'''楕円拋物面'''(elliptic paraboloid) :楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。 *'''双曲拋物面'''(hyperbolic paraboloid) :双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。 *'''一葉双曲面'''(hyperboloid of one sheet) :楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。 *'''二葉双曲面'''(hyperboloid of two sheet) :楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。 *'''錐面'''(conical surface) :方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。 閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。 同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。 厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。 <small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small> 曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。 :パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math> :ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math> また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。 例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。 <math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。 これのベクトル方程式を求めてみよう。 :①<math>c=0</math>のとき ::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math> ::[1]<math>b=0</math>のとき :::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math> :::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math> :::<math>y=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math> ::[2]<math>b\neq0</math>のとき :::<math>x=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math> :②<math>c\neq0</math>のとき ::<math>x=t, y=u</math>と置換すると ::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math> ::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math> なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。 <math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。 <math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から :<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math> :<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math> ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。 これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。 接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。 曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。 三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。 モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。 以下、正則曲面のみ扱う。 <math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。 :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> 則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から :<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math> である。 これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。 {{定理|(曲面積)}} <math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br> 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は :<math>S=\iint_D \sqrt{EG-F^2}dtdu</math> {{定理終わり}} この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。 <math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。 具体的には、 :<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math> より :<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math> ここで合成関数の常微分公式より :<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math> なので :<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math> :<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math> よって :<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math> このように、線素は<math>\theta</math>のとり方に依存しない。 そこで、最後の式で右辺を二乗した :<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math> を<math>S</math>の'''第一基本形式'''と定める。 第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと :<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。 ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。 また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。 また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。 則ち、第一基本量が曲面の本質であると予想される。 <math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。 等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。 面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。 曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。 向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。 メビウスの帯が向き付け不能である証明を概説する。 :接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。// 四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。 2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、 #パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。 #この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。 #<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math> この2つは'''パラメータ変換で同値'''という。 このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。 任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。 向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。 外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。 <math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。 パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。 ===回転面=== ここでは三次元空間内の曲面について考える。 高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。 簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。 :任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。 :領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。 :則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。 纏めると以下のようになる。 {{定理|(回転面の方程式)}} <math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は :<math>z=f(\sqrt{x^2+y^2})</math> {{定理終わり}} <math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。 回転面に対し、元の曲線を'''母線'''という。 母線が直線である回転面は'''円錐'''である。 :<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は :<math>z=m\sqrt{x^2+y^2}+n</math> :<math>z-n = m\sqrt{x^2+y^2}</math> これを両辺二乗すると :<math>(z-n)^2=m^2x^2+m^2y^2</math> であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。 回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。 点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。 このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。 {{定理|(ロドリゲスの公式)}} :<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> {{定理終わり}} *証明 :<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math> :<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので ::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math> :<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より ::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math> :<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、 :<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から ::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> :これらを足して ::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>// この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。 また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。 ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。 :円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。 :ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は ::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math> :ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると ::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math> :なので、 ::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math> :円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので ::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math> :であり、 ::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math> :ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より ::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math> :このベクトルと軸ベクトルの内積をとると ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math> ::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math> :<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math> :則ち ::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>// 円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。 ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。 正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、 :<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので :<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> 則ち、ベクトル関数の全微分は微小回転で近似される。 オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと :<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math> これの両辺を<math>dt</math>で割って :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math> これは剛体の速度公式である。 ロドリゲスの公式の一次変換表記を考える。 <math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、 :<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math> :<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math> :<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると :<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、 :<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math> という表示を得る。 更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より :<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math> が成り立つので、最終的に :<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math> と二次の行列多項式で表示される。 なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。 ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。 先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。 <math>\mathbf{N}\boldsymbol{r}</math>を計算すると :<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math> 則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。 更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。 ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br> また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math> ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math> ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。 このことは以下の考え方でも求まる。<br> <math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は :<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math> ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので :<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math> これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、 :<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math> :<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math> :<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math> 則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。 更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。 これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。 補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。 ===種々の曲率=== ここでは三次元空間内の正則曲面について考える。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。 <math>C</math>の接ベクトルは合成関数微分公式より :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math> と表示される。 ここで両辺の<math>ds</math>を形式的に払うと :<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> これの自分自身との内積をとると :<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math> 弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると :<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math> と、第一基本形式を別の方法で得られた。 <math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで :<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math> :<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> :<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。 後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。 :<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math> ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。 <math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math> なので<math>ds</math>に関して形式的に通分して :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> 右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。 <math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math> また、<math>u</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math> ここから第二基本量は :<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math> とも表示され、第二基本形式の別表示 :<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> を得る。 これは更に全微分から微小ベクトル同士の内積として :<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math> とも書ける。 第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。 第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと :<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。 ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。 :<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに :<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math> :が判るので、 :<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math> これはヘッシアンを法線の長さで割った行列である。 則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。 実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。 このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。 ここで第二基本形式を定義した式 :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math> 右辺を形式的に<math>dt^2</math>で割ると :<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。 そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。 :<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> 法曲率の幾何学的意味を考える。 <math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。 則ち、法曲率は法曲線の曲率に対応する。 なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。 法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。 :法曲率の定義式より ::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*) :これが<math>k</math>の恒等式なので微分しても等号が成り立ち、 ::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math> :フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので ::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@) :が成り立つ必要がある。 :これを<math>k</math>倍して(*)を引くと ::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#) :これと(@)を連立して ::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math> :これを(#)に代入して ::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($) :という二次方程式を得る。 :($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。 :逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。// この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。 ($)の左辺を変形してみると、 :<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math> :<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math> :<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math> :<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math> :<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math> という、第一基本行列と第二基本行列を用いた形が出てきた。 ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して :<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math> これを二次形式表示すると :<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math> と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。 この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。 二つの主方向の関係を調べる。 :主方向の定義より ::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> :なので ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> :第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math> :上下の式の差をとって ::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math> :<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。 ::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math> :この二つのベクトルは主方向を向くので2つの主方向は直交する。 <math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。 上の結果から、'''臍点でない各点で2つの主方向は直交する'''。 主曲率に対して解と係数の関係から得る値 :<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math> をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。 全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。 そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。 ここで<math>\mathbf{S}</math>の固有方程式は :<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math> <math>\det\mathbf{K}^{-1}\neq0</math>より :<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math> これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。 則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。 更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。 {{定理|(ヴァインガルテンの式)}} :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> {{定理終わり}} *証明 :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。 :両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> :<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math> :<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>// 臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から :<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math> であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して :<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math> を得る。 <math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して :<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math> ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると :<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{T}</math> であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。 :<math>\mathbf{H}={}^t\!\mathbf{H}</math> より :<math>{}^t\!\mathbf{T}=\mathbf{T}</math> が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。 よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。 モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに :<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math> を得る。 等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。 ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。 具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。 主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。 任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。 平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。 極小曲面は表面張力の理論に応用されている。 例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。 曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。 最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。 :<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> :<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math> これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として :<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math> この<math>\mathbf{W}</math>を'''第三基本行列'''という。 見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。 臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。 このとき、各基本形式は :<math>I=dp^2+dq^2</math> :<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math> :<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math> と表示されることが知られている。 第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。 :<math>I\!I\!I=2HI\!I-KI</math> このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。 これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。 この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。 なお、平均曲率を考えるときは外側の空間の情報が必要である。 ==直交曲線座標系== {{節stub}} ===円筒座標系=== 平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。 空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。 円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。 そのため、円筒座標系と直交座標系の対応は以下のようになる。 :<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math> 但し、<math>r</math>は基準面の裏側では負とする。 直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。 :<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。 :<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。 :<math>z</math>曲線:<math>z</math>軸に平行な直線。 ここで、各曲線に沿った微小変化がどのように表されるか見ていく。 <math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。 <math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。 上で求めた関係式より :<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math> なので、 :<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> よって :<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math> 再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。 纏めると以下のようになる。 {| class="wikitable" | ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム |- |style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math> |- |style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math> |- |style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math> |} ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。 そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。 :<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math> :<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math> :<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math> これを一次変換の形式で表すと :<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math> となる。 このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。 なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。 逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。 回転行列は直交行列なので :<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math> であり、 :<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math> 円筒座標系は、[[電磁気学]]の解析でよく使用される。 例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。 ===極座標系=== 高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。 一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。 このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。 xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。 <math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。 <math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。 <math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。 逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。 <math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。 また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。 よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。 以上を纏めると、直交座標と球面座標の対応関係は :<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math> 一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。 直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。 :<math>r</math>曲線:原点を通る半直線。 :<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。 :<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。 各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて :<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math> と求まる。 これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により :<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math> と変換テンソルが求まる。 これも直交行列であるので、逆変換テンソルは :<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math> と求まる。 球面座標系は、[[古典力学]]の解析でよく使用される。 例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。 球面座標系は特に機械制御に応用されている。 円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。 ===円環座標系=== ===双極座標系=== ===回転放物面座標系=== ===放物柱座標系=== ===回転楕円面座標系=== ===楕円柱座標系=== ===楕円体座標系=== ==空間微分== ここでは三次元ユークリッド空間で考える。 ===勾配=== スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、 :<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math> を<math>\varphi</math>の'''勾配'''(gradient)と定義する。 勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。 勾配で定義される概念としては、電場が有名である。 :電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は :<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math> 勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。 '''空間偏微分演算子'''(ハミルトン演算子)を <math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math> と定義する。 この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。 <math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。 この演算子を用いれば勾配の表式は :<math>\mathrm{grad}\,\varphi=\nabla\varphi</math> となる。 <math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。 勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。 #<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性) #<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則) #<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分) #<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分) 任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。 以下、正則なスカラー場に限って扱う。 等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。 :<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。 :等位面の方程式を<math>t</math>で両辺微分して ::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math> :<math>t=t_0</math>のとき ::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math> ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。 よって等位面の接平面の方程式は :<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math> である。 スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は :<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math> これをベクトルの内積とみると :<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> :<math>=\nabla\varphi\cdot d\boldsymbol{x}</math> ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。 <math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。 このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数 :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math> を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。 方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。 :<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。 ::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math> ::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math> :ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば ::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math> ::<math>=\frac{d\Phi(t)}{dt}</math> ::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math> ::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math> ::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math> よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。 内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math> よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。 このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。 方向微分係数を'''方向導関数'''に拡張することを考える。 形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。 :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math> 正式には極限を用いて :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math> と定義する。 内積を書き下すと :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math> これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと :<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math> :<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math> となる。 則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。 更に、多変数関数のテイラー二次近似は :<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math> と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。 多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。 スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。 ベクトル場の全微分は :<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math> で定義された。 ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。 この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。 則ち、ベクトル場の全微分は :<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math> と表される。 これを形式的に :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math> と書き表すことができる。 則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。 ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。 ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math> が成り立つことが判る。 これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。 則ち、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> である。 ===発散=== ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、 :<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math> を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。 発散が用いられる概念としては、'''ガウスの法則'''が有名である。 :電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として :<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math> 球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では <math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。 勾配と同様に発散をナブラで表すことを考えると、 :<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math> という表式を得る。 <math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。 発散に対しては以下が成り立つ。 #<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性) #<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は内積の線型性より、後者は成分演算と勾配の定義より示される。 ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。 :<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math> ここで跡が発散そのものになっているので :<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> が成り立つ。 発散の物理的意味を考える。 :密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。 :点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。 :単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より ::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math> :<math>\delta x\to0</math>の極限で ::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math> :他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では ::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math> :よって単位体積当たりでは ::<math>\rho\nabla\cdot\boldsymbol{v}</math> :を得る。 ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。 この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。 発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。 また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。 ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。 位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。 :<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math> <math>y, z</math>も同様なので :<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math> よって発散のライプニッツ則から :<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math> この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。 ベクトル解析の黎明期では発散の逆符号で表される :<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math> という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。 ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。 ===回転=== 回転運動は、以下の3つにより一意に定まる。 *回転軸の方向 *回転の速さ *回転方向(軸に対して右回転か左回転か) 「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。 従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。 ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。 :<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> <math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。 <math>z</math>軸方向の成分について考える。 <math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。 ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。 対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。 これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。 回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。 :電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として :<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math> 流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。 回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。 勾配・発散と同様に空間偏微分演算子による表記を考える。 成分に着目すると外積の形式なので、 :<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math> と表されることが判る。 ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。 外積の性質から、回転は行列式 :<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math> でも表示される。 回転に対しては以下が成り立つ。 #<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性) #<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は外積の線型性より、後者は成分演算と勾配の定義より示される。 回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。 回転は、ヤコビ行列を用いると以下のように表される。 :<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> :ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。 ===ラプラシアン=== 上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。 二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。 :<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math> ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。 そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。 以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。 :<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math> 二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。 但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。 ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。 :<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math> スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。 勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。 ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。 :'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math> :'''ポアソン方程式''':<math>\text{∆}\varphi=f</math> :'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math> :'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math> :'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math> ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。 なお、ラプラス方程式の解を'''調和関数'''という。 <math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。 :<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math> ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。 実際には以下のように表示される。 :<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math> *証明 :対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。 ::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math> :より ::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math> :また、 ::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> :より ::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math> ::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math> :<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると ::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math> ::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial {y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math> ::<math>=\text{∆}a_x</math>// ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。 則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。 歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。 :<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math> これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。 これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。 また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は :<math>\text{⧠}\psi=-\mu^2\psi</math> というミンコフスキー空間上のヘルツホルム方程式と解釈される。 ===微分定理=== ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。 既に紹介したものを以下に並べる。 #勾配 #:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math> #:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>( #:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math> #:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math> #:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math> #:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> #発散 #:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math> #:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math> #:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> #回転 #:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math> #:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math> #:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> #ラプラシアン #:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math> #:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math> 二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。 <math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math> 次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。 スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math> :<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math> ベクトル場の発散はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math> ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math> :<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math> 則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。 一階の空間微分の結果に対してラプラシアンを考えてみる。 :<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math> :<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math> :<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math> ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。 則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。 :<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。 スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。 :<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すればいいので公式化する必要が無い。 :<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math> :<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math> :<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math> :<math>\nabla\times(\boldsymbol{a}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math> :<math>\boldsymbol{a}\times(\nabla\times\nabla)</math> :<math>\nabla\cdot(\nabla\times\nabla)</math> :<math>\nabla\times(\nabla\times\nabla)</math> は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br> また、三重積の公式はナブラを代入した時点で破綻する。 次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。 :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すれば良いので公式化する必要が無い。 :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math> 及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。 故に、ここで問題になるのは :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math> の扱いである。 これらには以下の公式が成り立つ。 :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math> ===ポテンシャル論=== ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか? ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば :<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math> という一階線型連立偏微分方程式となる。 この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。 そして、その形状を具体的に与えるのが次の定理である。 {{定理|(ポアンカレの補題1)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が単連結であることである。 {{定理終わり}} 証明は後述する。 この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。 保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math> :<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1) :これを<math>y</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math> :更に回転の条件から ::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math> :これが<math>a_y(x,y,z)</math>に等しいので ::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math> :これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。 :両辺を<math>y</math>で偏積分して ::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math> :これを(1)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2) :これを<math>z</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math> :更に回転の条件から ::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> ::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> :これが<math>a_z(x,y,z)</math>に等しいので ::<math>\frac{dh}{dz}=a_z(m,n,z)</math> :これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。 :両辺を<math>z</math>で常積分して ::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math> :これを(2)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>// ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。 ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか? これも同様に以下の定理で与えられる。 {{定理|(ポアンカレの補題2)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が'''可縮'''であることである。 {{定理終わり}} 証明は後述する。 ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。 ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math> :第一式より ::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math> :<math>y</math>で偏積分して ::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math> :ライプニッツの積分法則より ::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3) :第三式より ::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math> :<math>y</math>で偏積分して ::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math> :ライプニッツの積分法則より ::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math> :これと(3)を第二式に代入して ::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math> ::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math> ::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math> :よって ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4) :この右辺を<math>h(x, y, z)</math>とおくと ::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math> :なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。 :これは(4)の左辺が<math>y</math>に依存しないことと整合する。 :故に(4)は ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math> :という二変数の偏微分方程式に落ちる。 :この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。 :このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。 :一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので ::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math> :同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して ::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math> :を得る。 :これは全微分方程式が完全微分方程式である条件なので、 ::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math> :なるスカラー場<math>\Phi</math>が存在する。 :則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>// ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。 ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。 ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。 ポテンシャルに関連した定理として、以下が成り立つ。 {{定理|(ヘルツホルムの定理)}} ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。 則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math> を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。 {{定理終わり}} *証明 :ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math> :ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math> :発散の線型性より ::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math> :ここでポアンカレの補題2を用いて ::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>// この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。 広義ポテンシャルに対して :<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math> が成立する。 広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。 例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式) :<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math> をヘルツホルム分解とクーロンゲージ条件により解析すると :<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math> を得る。 更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。 ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。 *応用問題 *:真空のマクスウェル方程式<math> \begin{cases} \nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\ \nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\ \nabla\cdot\boldsymbol{D}&=0\\ \nabla\cdot\boldsymbol{B}&=0\\ \end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。 ==空間積分== ここでは三次元ユークリッド空間で考える。 ===線積分=== 偏積分 :<math>\int_a^b f(x,y) dx := \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k,y) \Delta x</math>(<math>\Delta x = \frac{b-a}{n}, x_k = a + k\Delta x</math>) は<math>xyz</math>空間を<math>y</math>を固定した平面で切った断面に於ける曲線<math>z=f(x, y)</math>と<math>x</math>軸、直線<math>x=a, x=b</math>の囲む符号付き面積であった。 このとき積分変数を各点で見ると<math>x</math>軸という直線上を<math>a\to b</math>と単調に進むことになるが、これを<math>xyz</math>空間の任意の曲線<math>C</math>に拡張することを考える。 三次元空間の曲線をベクトル表示すると :<math>\boldsymbol{r}(t)=\begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix}\quad t\in [\alpha, \beta]</math> であり、被積分関数はこの曲線上の点を入力とするスカラー場と考えられるので :<math>\varphi=\varphi(\boldsymbol{r})</math> 偏積分の<math>dx</math>は「<math>x</math>軸上の微小変位」であったが、<math>t</math>が単調なとき曲線に沿った微小変位は曲線上の移動距離、則ち弧長の微小量と考えられるので線素を用いて :<math>dl=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> これらを総合すると、<math>C</math>に沿った積分というものは曲線のパラメータを用いて :<math>\int_\alpha^\beta \varphi(\boldsymbol{r}(t))\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> と表示されることになる。 これをスカラー場<math>\varphi</math>の<math>C</math>に沿った'''線積分'''<sup>※</sup>(line integral)という。また、<math>C</math>を'''積分経路'''(積分路、path)という。 <small>※量子力学の[[量子力学#経路積分法|経路積分]](path integral)とは異なる概念である。</small> スカラー場の線積分は :<math>\int_C \varphi dl</math> のように略記される。 特に積分経路が閉曲線('''閉経路''')である場合は :<math>\oint_C \varphi dl</math> のように書き、これを<math>C</math>に沿った'''周回/閉路 積分'''(closed line integral)という。 1の線積分<math>\int_C dl</math>は弧長に等しい。 <math>\varphi(\boldsymbol{r})</math>の<math>C</math>の端点に於ける値の差を考える。 <math>t\in[\alpha,\beta]</math>を各<math>t_i</math>に等分割したとき、スカラー関数のテイラー展開より :<math>\varphi(\boldsymbol{r}(t_i))-\varphi(\boldsymbol{r}(t_{i-1}))=\nabla\varphi(\boldsymbol{r}_{t_i-1})\cdot d\boldsymbol{r}\big|_{t=t_i}+O\left(\left\|d\boldsymbol{r}\big|_{t=t_i}\right\|\right)</math> なので :<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))\fallingdotseq \sum_{i=1}^n \nabla\varphi(\boldsymbol{r}(t_{i-1}))\cdot d\boldsymbol{r}\big|_{t=t_i}</math> 右辺で分割数<math>n</math>を無限大に飛ばした極限は区分求積法より :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r}</math> 則ち、曲線<math>C</math>に沿った微分積分学の基本定理 :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r} = \varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math> を得る。 これは一変数積分の<math>\int_a^b \frac{df}{dx}dx=f(b)-f(a)</math>に対応し、これは常積分に関する微分積分学の基本定理の別表現である。 左辺をスカラー場の線積分と同様に<math>\int_C \nabla\varphi\cdot d\boldsymbol{r}</math>と書くことにする。 ここで<math>\nabla\varphi</math>を一般のベクトル場<math>\boldsymbol{a}</math>に拡張して同様に :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}</math> を考えてみたい。 ここで<math>d\boldsymbol{r}</math>は<math>\boldsymbol{r}</math>の全微分と解釈され、一変数関数なので :<math>d\boldsymbol{r}=\frac{d\boldsymbol{r}}{dt}dt</math> 則ち、 :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}=\int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\cdot\frac{d\boldsymbol{r}}{dt}dt</math> という曲線のパラメータに関する積分に帰着された。 これをベクトル場<math>\boldsymbol{a}</math>の<math>C</math>に沿った'''線積分'''という。 <math>\frac{d\boldsymbol{r}}{dt}</math>は<math>C</math>の接線なので<math>\boldsymbol{a}(\boldsymbol{r})\cdot\frac{d\boldsymbol{r}}{dt}</math>は<math>\boldsymbol{a}</math>から<math>C</math>の接線に沿う沿流成分を取り出していることになる。 このことから、ベクトル場の線積分を特に'''接線積分'''(integral of tangential component)ということがある。 また、<math>d\boldsymbol{r}</math>のノルムを考えてみると :<math>\|d\boldsymbol{r}\|=\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt=dl</math> より線素に一致する。 このことから、<math>d\boldsymbol{r}</math>を'''線素ベクトル'''と呼び、<math>d\boldsymbol{l}</math>とも書く。 線素ベクトルは曲線上の微小変位を表すので座標軸上の微小変位の重ね合わせと考えれば :<math>d\boldsymbol{l}=\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> よって接線積分は形式的に :<math>\int_C (a_xdx+a_ydy+a_zdz)</math> とも書かれる。 更に、弧長パラメトライズされている場合は接ベクトルを用いて :<math>d\boldsymbol{l}=\boldsymbol{t}ds</math> とも表せる。 接線積分で定義される概念としては、仕事が有名である。 :物体を経路<math>C</math>に沿って力<math>\boldsymbol{F}</math>で運んだときの仕事は摩擦や空気抵抗を無視すると ::<math>W=\int_C \boldsymbol{F}\cdot d\boldsymbol{r}</math> また、アンペールの法則も線積分で示される。 :閉経路<math>C</math>で囲まれた領域を貫く電流の大きさ<math>I</math>とその電流が生む磁場<math>\boldsymbol{H}</math>に対して ::<math>\oint_C \boldsymbol{H}\cdot d\boldsymbol{l}=I</math> 更に、以下のような概念も定義されている。 :流体の速度場<math>\boldsymbol{v}</math>の循環は ::<math>\Gamma(C)=\oint_C \boldsymbol{v}\cdot d\boldsymbol{l}</math> *応用問題 **運ばれる物体の質量を<math>m</math>としたとき、仕事の定義とニュートンの運動方程式<math>m\frac{d^2\boldsymbol{r}}{dt^2}=\boldsymbol{F}</math>を用いて運動エネルギーに関するエネルギーの原理<math>W=\frac{1}{2}mv^2-\frac{1}{2}mv_0^2</math>を証明せよ。 <math>C</math>が正の向きにパラメトライズされたとき、負の向きにパラメトライズされた曲線を<math>-C</math>と表した。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の始点が一致するとき、これを一つの曲線と見做して曲線の和 :<math>C_1+C_2</math> が定義される。 これを'''区分的に定義された曲線'''という。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の終点が一致するとき、<math>C_1</math>を始点とすると曲線の差は :<math>C_1-C_2=C_1+(-C_2)</math> で定義される。 <math>C</math>が'''区分的に滑らか'''であるとは、<math>C</math>が有限個の滑らかな曲線の和であることである。 これらを踏まえると、線積分には以下の性質が成り立つ。 #スカラー場 #:<math>\int_C (k\varphi+l\psi) dl=k\int_C \varphi dl + l \int_C \psi dl</math> #:<math>\int_{-C}\varphi dl = -\int_C \varphi dl</math> #:<math>\int_{C_1+C_2}\varphi dl = \int_{C_1}\varphi dl + \int_{C_2}\varphi dl</math> #ベクトル場 #:<math>\int_C (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{l}=k\int_C \boldsymbol{a}\cdot d\boldsymbol{l}+l\int_C \boldsymbol{b}\cdot d\boldsymbol{l}</math> #:<math>\int_{-C}\boldsymbol{a}\cdot d\boldsymbol{l} = -\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math> #:<math>\int_{C_1+C_2}\boldsymbol{a}\cdot d\boldsymbol{l} = \int_{C_1}\boldsymbol{a}\cdot d\boldsymbol{l} + \int_{C_2}\boldsymbol{a}\cdot d\boldsymbol{l}</math> 1番目の性質は線型性である。2番目の性質から、パラメータの変数変換('''再パラメトライズ''')が向き付けを保つときに線積分の値が保存されることが判る。 保存的ベクトル場に対する線積分<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>はスカラーポテンシャル<math>\varphi</math>を用いて<math>\int_C \nabla\varphi\cdot d\boldsymbol{l}</math>と書けるので微分積分学の基本定理より<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>に等しい。 ここで<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>は曲線の端点にのみ依存し形状には依存しない。 そのため、'''線積分の値が積分経路に依存しない必要十分条件はベクトル場が保存的であること'''である。 ここで閉曲線である場合を考えると :<math>\boldsymbol{r}(\alpha)=\boldsymbol{r}(\beta)</math> より :<math>\varphi(\boldsymbol{r}(\alpha))=\varphi(\boldsymbol{r}(\beta))</math> なので :<math>\oint_C \nabla\varphi\cdot d\boldsymbol{l}=0</math> である。 逆に言うと、'''周回積分が0でない閉経路をとれるとき<math>\varphi</math>は<math>\boldsymbol{a}</math>のスカラーポテンシャルではない'''。 この事実は偏微分方程式を解いて求めたスカラーポテンシャルが実際にポテンシャルであるかどうかの確認に用いられる。 なお、先程求めたスカラーポテンシャルの一般式 :<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math> は線積分で表される。 具体的には、積分経路を<math>\gamma:(m,n,l)\to(m,n,z)\to(m,y,z)\to(x,y,z)</math>という3つの線分の和としてとれば :<math>\varphi=\int_\gamma \boldsymbol{a}\cdot d\boldsymbol{l}+C</math> である。 ここでスカラーポテンシャルとは勾配方程式 :<math>\nabla\varphi=\boldsymbol{a}</math> の解だったので、'''線積分と勾配は逆演算'''である。 <math>\nabla\varphi\cdot d\boldsymbol{l}=d\varphi</math>より、スカラーポテンシャルの存在と完全微分方程式の対応がここからも得られる。また、完全微分方程式<math>d\varphi=0</math>の解は曲線を与えることも容易に判る。 仕事が線積分で定義されるという話をしたが、エネルギーの原理より力場がスカラーポテンシャルを有する(保存場)場合はエネルギー変化が移動経路に依存しないので力学的エネルギー保存法則が成り立つ。これが高校物理で扱った「保存力なら力学エネルギーが保存する」ことの正式な表現である。 ベクトル場の線積分はベクトル場と線素ベクトルの内積をとって積分していたが、外積をとって積分することもできる。 具体的には、 :<math>\boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} a_ydz-a_zdy \\ a_zdx-a_xdz \\ a_xdy-a_ydx \end{pmatrix}</math> より :<math>\int_C \boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} \int_C (a_ydz-a_zdy) \\ \int_C (a_zdx-a_xdz) \\ \int_C (a_xdy-a_ydx) \end{pmatrix}</math> :<math>=\begin{pmatrix} \int_\alpha^\beta \left\{ a_y(\boldsymbol{r}(t))\frac{dz}{dt}-a_z(\boldsymbol{r}(t))\frac{dy}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_z(\boldsymbol{r}(t))\frac{dx}{dt}-a_x(\boldsymbol{r}(t))\frac{dz}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_x(\boldsymbol{r}(t))\frac{dy}{dt}-a_y(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \end{pmatrix}</math> これは物理学的にはビオ・サヴァールの法則の記述に用いられている。 :真空中で経路<math>C</math>を正の向きに流れる強さ<math>I</math>の定常電流・<math>C</math>上にない点<math>\mathrm{P}</math>・<math>C</math>上の点<math>\mathrm{Q}</math>に対し、<math>C</math>全体で生じる磁束密度<math>\boldsymbol{B}</math>の<math>\mathrm{P}</math>での値は真空の透磁率<math>\mu_0</math>として ::<math>\boldsymbol{B}(\mathrm{P})=\frac{\mu_0 I}{4\pi}\int_C \frac{\overrightarrow{\mathrm{PQ}}\times d\boldsymbol{l}}{\|\overrightarrow{\mathrm{PQ}}\|^3}</math> ===面積分=== ===体積分=== ===積分定理=== ==発展事項== {{節stub}} {{Advanced|多様体論}} {{Advanced|微分幾何学}} {{Advanced|積分幾何学}} ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。 ===体積分再考=== 体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。 線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。 1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。 線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。 媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。 体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。 全微分を一次変換表記すると :<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。 そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。 '''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。 そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。 これは正方行列ならヤコビアンの絶対値に一致する。 {{NavTop|title=補足:体積拡大率に一致する証明}} :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math> よって :<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math> :<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math> :<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列) :<math>=\mathbf{R}^*\mathbf{R}</math> :<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math> <math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/> 則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。// {{NavBottom}} よって体積分は :<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math> ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。 実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。 なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。 実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。 ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。 ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。 :<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。 つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。 ※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。 ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。 ===多様体=== ===微分形式=== [[線型代数学続論/外積代数]]も参照。 ===リーマン計量=== ===テンソル解析=== [[線型代数学続論/テンソル代数]]も参照。 ===複素ベクトル解析=== [[複素解析学]]も参照。 {{DEFAULTSORT:へくとるかいせき}} [[Category:解析学]] [[Category:微分積分学]] [[Category:ベクトル解析|かいせきかくきそ]] ncqwcxsyewapzb8zxgc4bjn1zxf3r0n 304607 304598 2026-10-11T06:42:28Z ~2026-53216-21 92705 /* 線積分 */ 304607 wikitext text/x-wiki {{Pathnav|数学|解析学|解析学基礎|frame=1}} {{wikipedia|ベクトル解析}} ここでは、ベクトル解析について解説する。[[物理数学I ベクトル解析]]も参照。 ==前提知識== ここでは、実数のみで考える。 ===ベクトル=== [[高等学校数学C/ベクトル]]、[[線型代数学/ベクトル]]、[[解析学基礎/ベクトル]]などを参照。本項では、矢印を付した表記(<math>\vec{a}</math>など)と太字斜体による表記(<math>\boldsymbol{x}</math>など)を混用する。 ===行列=== [[高等学校数学C/数学的な表現の工夫]]及び[[線形代数学]]・[[線型代数学続論]]の各ページを参照。本項では大文字の太字立体(<math>\mathbf{A}</math>など)で表記する。 ===多変数解析=== [[解析学基礎/多変数関数の微積分]]を参照。 ===領域=== <math>D\subset\mathbb{R}^n</math>と点<math>\boldsymbol{a}\in D</math>(位置ベクトル表記なので太文字斜体)に対し、集合<math>B_\varepsilon(\boldsymbol{a}) := \{ \boldsymbol{x} \in D \mid \| \boldsymbol{x} - \boldsymbol{a} \|<\varepsilon \}</math>を点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開球'''という。不等号を<math>\leqq</math>に変えたときは開区間↔閉区間と同様に'''閉球'''と呼ぶ。このとき、<math>D</math>のように<math>\mathbb{R}^n</math>の部分集合であって<math>\varepsilon</math>-開球を含むものを点<math>\boldsymbol{a}</math>の'''<math>\varepsilon</math>-開近傍'''と呼ぶ。閉球を含むときは同様に'''閉近傍'''と呼ぶ。 <math>\forall \boldsymbol{a} \in U, \exist \varepsilon>0, B_\varepsilon(\boldsymbol{a})\subset U</math>を満たす<math>U\subset\mathbb{R}^n</math>を'''開集合'''と呼び、<math>V=\mathbb{R}^n\setminus U</math>を'''閉集合'''と呼ぶ。 注意点として、開集合と閉集合は排反ではない。則ち「開集合且つ閉集合」である集合が存在し(例えば<math>\mathbb{R}, \varnothing</math>)、「開集合でも閉集合でもない」集合も存在する(例えば<math>[0, 1)</math>)。 <math>M\subset\mathbb{R}^n</math>を含む最小の閉集合を<math>M</math>の'''閉包'''と呼び、<math>M^-, \bar{M}, \mathrm{Cl}(M)</math>などと表す。例えば有理数の稠密性より<math>\mathbb{Q}^-=\mathbb{R}</math>である。 閉包の性質として「閉包=集合の内部と境界の和集合(<math>M^- = \mathrm{Int}(M) \cup \partial{M}</math>)」がある。 集合<math>S\subset\mathbb{R}^n</math>に対して以下を満たす<math>\mathbb{R}^n</math>上開集合の組<math>(G_1, G_2)</math>が'''とれない'''とき、 #<math>G_1 \cap S = \varnothing \land G_2 \cap S = \varnothing</math> #<math>S = (G_1 \cap S) \sqcup (G_2 \cap S)</math> 「<math>S</math>は'''連結'''である」または「<math>S</math>は'''連結集合'''」という(但し、<math>\sqcup</math>は[[w:非交和|非交和]])。 空でない開連結集合を'''領域'''という。 実は、高校数学や1年次の解析学で扱ってきた「領域」はこの定義を満たしていないことが多かった。これは、「領域」の歴史的な用法では「条件の解集合」という意味であって開性や連結性を要求しなかったためである。しかし、本項を含めた以降に登場する数学ではこの定義を満たしていることが前提条件となる。なお、ややこしいことに「積分領域」は従来通り「その上で積分を行う集合」という緩い意味で使われることが多いので、区別が必要である。 ===右手系=== 三次元空間の正規直交基底を<math>(\boldsymbol{e}_1, \boldsymbol{e}_2, \boldsymbol{e}_3)</math>と置く。螺子を<math>\boldsymbol{e}_1\to\boldsymbol{e}_2</math>の向きに回すと<math>\boldsymbol{e}_3</math>の正方向に進むように3つの軸をとった系を'''右手系'''という。負方向に進むようにとったものを'''左手系'''という。数学・物理に限らず理数系の約束事として、'''三次元空間は必ず右手系で考える'''という暗黙の了解が存在するので覚えておこう。 右手系・左手系は基底の一部または全ての符号を反転することで変換することができる。一つだけを反転する場合は'''鏡像変換'''、二つだけを反転する場合は'''半回転'''、全てを反転する場合は'''空間反転'''と呼ぶ。 外積の結果として得るベクトルは右手系・左手系のどちらを考えるかで向きが変わる。このように、右手系↔左手系の変換で向きが変わるベクトルを'''軸性ベクトル'''という。 系の取り方で向きが変わるということは基底の係数である'''成分は不変量'''である。つまり、観測者の動きにベクトルが追従し、このベクトルは「物理的な実体を有しているのではなく計算の都合上向きが定められた便宜的な(=観測者が勝手に決めた)ベクトル」ということである。そのため、軸性ベクトルは'''擬ベクトル'''(シュードベクトル)とも呼ばれる。 位置や速度、加速度のような右手系・左手系のどちらを考えても同じ向きを向くベクトルを'''極性ベクトル'''という。座標系を取り換えても向きが維持されるため'''成分は座標変換に応じて変化する'''。これは、「観測の仕方によって起こる現象は変わらない」ということである。つまり擬ベクトルに対し、極性ベクトルは'''物理的実体を有するベクトル'''である。 偶奇と同じように軸性・極性にも外積を通じた相互関係が存在する。 :(軸性)×(軸性)=(軸性) :(軸性)×(極性)=(極性) :(極性)×(極性)=(軸性) ==基礎事項== ===ベクトル関数=== 関数<math>\boldsymbol{f} (x) = \sum_{i} f_i(x) \boldsymbol{e}_i</math>を'''ベクトル(値)関数'''(vector-valued function, vector function)という。 ただし、各<math>\boldsymbol{e}_i</math>は各座標軸方向の単位ベクトルであり、<math>\boldsymbol{f}(x)</math>の定義域は各<math>f_i(x)</math>の定義域の積集合である。 ベクトルの演算が成分ごとの演算結果を並べたベクトルで定義されたように、ベクトル関数の演算は(結果となる値が存在するならば)各成分の演算結果を並べたベクトルに等しい。これはベクトルの線型性による。 例えば、<math>\boldsymbol{f}(x) = \begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>の極限は、 :<math>\lim_{x\to0} \boldsymbol{f}(x) = \begin{pmatrix} \lim_{x\to0} \cos x \\ \lim_{x\to0} \sin x \end{pmatrix}</math> (<math>\because</math>線型性) :<math>=\begin{pmatrix} 1 \\ 0 \end{pmatrix}</math> :<math>=\boldsymbol{e}_x</math> と求まる。 このとき、<math>\boldsymbol{e}_x</math>を<math>\begin{pmatrix} \cos x \\ \sin x \end{pmatrix}</math>の<math>x\to0</math>に於ける'''極限ベクトル'''という。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で連続であるとは<math>\lim_{x\to\alpha}\boldsymbol{f}(x)=\boldsymbol{f}(\alpha)</math>が成立することであり、区間<math>I</math>で連続であるとは<math>\forall \alpha \in I</math>で連続であることである。 また、ベクトル関数の導関数<math>\boldsymbol{f}'(x)</math>は :<math>\frac{d}{dx} \boldsymbol{f} (x) = \frac{d}{dx} \left( \sum_i f_i(x) \boldsymbol{e}_i \right)</math> :<math>= \sum_i \left( \frac{d}{dx} f_i (x) \boldsymbol{e}_i \right)</math>(<math>\because</math>線型性) :<math>= \begin{pmatrix} f'_1(x) \\ f'_2(x) \\ \vdots \\ f'_i(x) \\ \vdots \end{pmatrix}</math> である。 この結果は、ベクトル関数に於ける導関数の正式な定義 <math>\lim_{h\to0} \frac{\boldsymbol{f}(x+h) - \boldsymbol{f}(x)}{h}</math>からも導かれる。 <math>\boldsymbol{f}(x)</math>が<math>x=\alpha</math>で微分可能であるとは極限値<math>\boldsymbol{f}'(\alpha)=\lim_{x\to\alpha}\frac{\boldsymbol{f}(x)-\boldsymbol{f}(\alpha)}{x-\alpha}</math>が存在することであり、区間<math>I</math>で微分可能であるとは<math>\forall \alpha \in I</math>で微分可能であることである。 高階導関数・高階微分可能も同様にして定義される。 <math>\boldsymbol{f}(x)</math>が区間<math>I</math>で連続ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^0</math>級であるといい、<math>\boldsymbol{f}\in C^0(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で微分可能で<math>\boldsymbol{f}'(x)\in C^0(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^1</math>級である(一階連続微分可能)といい、<math>\boldsymbol{f}\in C^1(I)</math>と書く。<math>\boldsymbol{f}(x)</math>が<math>I</math>で二階微分可能で<math>\boldsymbol{f}'\in C^1(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>上で<math>C^2</math>級である(二階連続微分可能)といい、<math>\boldsymbol{f}\in C^2(I)</math>と書く。同様にして順々に<math>C^k</math>級が定義され、<math>\forall k \in \mathbb{N}, \boldsymbol{f}\in C^k(I)</math>ならば<math>\boldsymbol{f}(x)</math>は<math>I</math>で<math>C^\infty</math>級(無限階連続微分可能)であるといい、<math>\boldsymbol{f}\in C^\infty(I)</math>と書く。<math>C^\infty</math>級である関数を'''滑らかな'''関数ともいう。 高校数学や高校物理で扱った平面(<math>\mathbb{R}^2</math>)上の運動は、実は2項ベクトル関数の理論に他ならない。 例えば、平面上の運動に於ける加速度・速度・変位の関係は<math>\boldsymbol{x}(t)= \begin{pmatrix} f(t) \\ g(t) \end{pmatrix}</math>として<math>\boldsymbol{a}(t) = \frac{d}{dt}\boldsymbol{v}(t) = \frac{d^2}{dt^2} \boldsymbol{x}(t)</math>と表すことができる。 曲線の媒介変数表示は、パラメータを変数とするベクトル関数とみることができる。 例えば、円の媒介変数表示<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \end{cases}</math>は、<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>という2次元ベクトル関数とみることができる。更に<math>\theta=\omega t</math>とすると、これは等速円運動の式である。 1変数ベクトル関数の微分に関して、以下の公式が成り立つ。 #定数倍の導関数:<math>\{k\boldsymbol{a}(x)\}'=k\boldsymbol{a}'(x)</math> #和・差の導関数:<math>\{ \boldsymbol{a}(x)\pm\boldsymbol{b}(x) \}' = \boldsymbol{a}'(x)\pm\boldsymbol{b}'(x)</math> #積の導関数:<math>\{ f(x)\boldsymbol{a}(x) \}' = f'(x)\boldsymbol{a}(x)+f(x)\boldsymbol{a}'(x)</math> #商の導関数:<math>\left\{ \frac{\boldsymbol{a}(x)}{f(x)} \right\}' = \frac{f(x)\boldsymbol{a}'(x)-f'(x)\boldsymbol{a}(x)}{\{f(x)\}^2} \quad (f(x)\neq0)</math> #内積の導関数:<math>\{\boldsymbol{a}(x)\cdot\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)+\boldsymbol{a}(x)\cdot\boldsymbol{b}'(x)</math> #外積の導関数:<math>\{\boldsymbol{a}(x)\times\boldsymbol{b}(x)\}' = \boldsymbol{a}'(x)\times\boldsymbol{b}(x)+\boldsymbol{a}(x)\times\boldsymbol{b}'(x)</math> #スカラー三重積の導関数:<math>[\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\cdot\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #ベクトル三重積の導関数:<math>[\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}]' = \boldsymbol{a}'(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}'(x)\times\boldsymbol{c}(x)\}+\boldsymbol{a}(x)\times\{\boldsymbol{b}(x)\times\boldsymbol{c}'(x)\}</math> #連鎖律(チェイン・ルール):<math>[\boldsymbol{a}\{f(x)\}]'=\boldsymbol{a}'\{f(x)\}f'(x)</math> ベクトル関数の'''ノルム'''(大きさ、長さ)は、通常のベクトルと同様に :<math>\| \boldsymbol{f}(x) \| = \sqrt{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)} = \sqrt{\sum_{i} \{f_i (x)\}^2}</math> で与えられる。 つまり、ノルムは元のベクトル関数と同一変数のスカラー関数である。 ここで、このスカラー関数が定数関数である条件に就て見てみよう。 :<math>\| \boldsymbol{f}(x) \|= c \quad (c\in\mathbb{R}_{>0})</math>の両辺を2乗して :<math>\| \boldsymbol{f}(x) \|^2 = \boldsymbol{f}(x)\cdot\boldsymbol{f}(x) = c^2</math> :両辺微分すると内積の微分より :<math>\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :<math>\therefore \boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0</math> :逆に、 :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=0 \iff 2\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\boldsymbol{f}'(x)\cdot\boldsymbol{f}(x)+\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'=0</math> :<math>\int \{\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)\}'dx= \int 0 dx</math> :<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}(x)=C_1</math>(<math>C_1\geq0</math>は積分定数) :<math>\| \boldsymbol{f}(x) \|^2=C_1</math>より :<math>\| \boldsymbol{f}(x) \| = \sqrt{C_1} = \mathrm{const}.</math> よって、以下が成り立つ。 {{定理|(直交条件の定理)}} :<math>\| \boldsymbol{f}(x) \|= \mathrm{const}. \iff \boldsymbol{f}(x) \cdot \boldsymbol{f}'(x) = 0</math> {{定理終わり}} これは、物理的には「位置ベクトルと速度ベクトルが直交する」ことを表す。則ち、<math>\boldsymbol{f}(x)</math>の終点が始点を中心とする円運動(球面運動)をするということである。 また、ベクトル関数が変数に依らず常に同一方向を向く条件も見てみよう(但し<math>\boldsymbol{f}(x)\neq\boldsymbol{0}</math>)。 :所与の条件は零ベクトルでない定ベクトル<math>\boldsymbol{c}</math>を用いて<math>\boldsymbol{f}(x) = f(x)\boldsymbol{c}</math>と表される。 :両辺微分して<math>\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}=f'(x)\boldsymbol{c}</math> :ここで元のベクトル関数との外積をとると :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\{f(x)\boldsymbol{c}\}\times\{f'(x)\boldsymbol{c}\}=f(x)f'(x) (\boldsymbol{c}\times\boldsymbol{c})=f(x)f'(x)\boldsymbol{0}=\boldsymbol{0}</math> :逆に、 :<math>\boldsymbol{f}(x)\times\boldsymbol{f}'(x)=\boldsymbol{0}</math>とすると一次従属なので :<math>\boldsymbol{f}'(x)=g(x)\boldsymbol{f}(x)</math>という微分方程式が成り立つ。 :各成分ごとに微分方程式を解くと、 ::これは変数分離型微分方程式なので第i成分は ::<math>\frac{df_i}{dx}=g(x)f_i(x)</math> ::<math>\int \frac{df_i}{f_i(x)}=\int g(x)dx</math> ::<math>G'(x)=g(x), C_i</math>を積分定数として<math>\log|f_i(x)|=G(x)+C_i</math> ::<math>C_i=\pm e^{C_i}</math>と改めておくと<math>f_i(x)=C_i e^{G(x)}</math> :よって :<math>\boldsymbol{f}(x)=\sum_i f_i(x) \boldsymbol{e}_i = \sum_i C_i e^{G(x)} \boldsymbol{e}_i = e^{G(x)} \sum_i C_i \boldsymbol{e}_i</math> :ここで<math>f(x)=e^{G(x)}, \boldsymbol{c}=\sum_i C_i \boldsymbol{e}_i</math>と置くと :<math>\boldsymbol{f}(x) = f(x) \boldsymbol{c}</math>となり、方向は変数に依らず一定であることが判る// よって、以下が成り立つ。 {{定理|(平行条件の定理)}} <math>\boldsymbol{c},\boldsymbol{f}(x)\neq\boldsymbol{0}</math>として :<math>\boldsymbol{f}(x)=f(x)\boldsymbol{c} \iff \boldsymbol{f}(x) \times \boldsymbol{f}'(x) = \boldsymbol{0}</math> {{定理終わり}} ベクトル解析では三次元空間の場合を考えることが多いため上では外積を用いて証明したが、外積は3項ベクトル(または7項ベクトル)にしか定義されないのであった。 一般次元では外積に代わって次の関係式を用いる。 :<math>|\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)|=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|</math> これはCS不等式の等号成立の場合である。 実際、<math>\boldsymbol{f}(x)\cdot\boldsymbol{f}'(x)=\|\boldsymbol{f}(x)\|\|\boldsymbol{f}'(x)\|\cos\{\theta(x)\}</math>より等号成立の必要十分条件は :<math>\cos\{\theta(x)\}=\pm1\iff\theta(x) \equiv 0 \,(\mathrm{mod}\pi)</math> であり、2ベクトル<math>\boldsymbol{f}(x), \boldsymbol{f}'(x)</math>は平行とわかる。<br/> 平行ということは一次従属ということなので先程のように変数分離形微分方程式を解くことで3次元と同じ結果を得る。// 補足として、力学への応用を考える。 :速さの二乗<math>\|\boldsymbol{v}(t)\|^2</math>を時間微分すると :<math>\frac{d}{dt}\|\boldsymbol{v}(t)\|^2=\frac{d}{dt}(\boldsymbol{v}(t)\cdot\boldsymbol{v}(t))=\frac{d\boldsymbol{v}(t)}{dt}\cdot\boldsymbol{v}(t)+\boldsymbol{v}(t)\cdot\frac{d\boldsymbol{v}(t)}{dt}=2(\boldsymbol{v}(t)\cdot\boldsymbol{a}(t))</math> :よって等速運動の条件<math>\|\boldsymbol{v}(t)\|=\mathrm{const}.</math>は直交条件の定理から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>に同値である。 :これを力学的に解釈すると、「加速度ベクトルは速度ベクトル方向に仕事をしないから速度ベクトルの大きさを変えずに向きだけを変える」となる。 :平面上で等速円運動を考えると円運動条件から<math>\boldsymbol{r}(t)\perp\boldsymbol{v}(t)</math>、等速条件から<math>\boldsymbol{v}(t)\perp\boldsymbol{a}(t)</math>なので<math>\boldsymbol{r}(t) /\!/ \boldsymbol{a}(t)</math>が出てくる。 :円運動条件<math>\|\boldsymbol{r}(t)\|^2=r^2</math>を一階微分すると ::<math>2\boldsymbol{r}(t)\cdot\boldsymbol{r}'(t)=0</math> :もう一度微分して ::<math>2(\boldsymbol{r}(t)\cdot\boldsymbol{r}''(t)+\boldsymbol{r}'(t)\cdot\boldsymbol{r}'(t))=0</math> :則ち ::<math>\boldsymbol{r}(t)\cdot\boldsymbol{a}(t)+\boldsymbol{v}(t)\cdot\boldsymbol{v}(t)=0</math> :位置ベクトルと加速度ベクトルが一次従属なので<math>\boldsymbol{a}(t)=\lambda\boldsymbol{r}(t)</math>であり、等速条件より<math>\|\boldsymbol{v}(t)\|=v</math>なので ::<math>\lambda r^2 + v^2 = 0</math> ::<math>\therefore \lambda = -\frac{v^2}{r^2}<0</math> :則ち<math>\boldsymbol{r}(t)</math>と<math>\boldsymbol{a}(t)</math>は逆向きであり、円運動の中心は<math>\boldsymbol{r}(t)</math>の始点なので<math>\boldsymbol{a}(t)</math>は常に円運動の中心を向く'''向心加速度'''であることが証明された。// なお、3次元以上では「<math>\boldsymbol{a}\perp\boldsymbol{b}\land\boldsymbol{b}\perp\boldsymbol{c}\implies\boldsymbol{a}/\!/\boldsymbol{c}</math>」が一般には成り立たないのでこの議論を成立させるには追加の条件が必要である。 <math>\boldsymbol{f}(x)</math>の不定積分は、各<math>f_i(x)</math>の原始関数を並べたベクトルを<math>\boldsymbol{F}(x)</math>として :<math>\int \boldsymbol{f}(x) dx = \boldsymbol{F}(x)+\boldsymbol{C}</math>(<math>\boldsymbol{C}</math>は各積分定数を並べたベクトル) と表される。 また、定積分は :<math>\int^b_a \boldsymbol{f}(x) dx=\boldsymbol{F}(b)-\boldsymbol{F}(a)</math> と表される。 1変数ベクトル関数の積分について、以下が成り立つ(不定積分表記だが定積分に就ても同様)。 #定数倍の原始関数:<math>\int \{k\boldsymbol{a}(x)\} dx = k\int\boldsymbol{a}(x)dx</math> #和・差の原始関数:<math>\int \{\boldsymbol{a}(x)\pm\boldsymbol{b}(x)\}dx=\int\boldsymbol{a}(x)dx\pm\int\boldsymbol{b}(x)dx</math> #内積の原始関数<math>\int \{\boldsymbol{k}\cdot\boldsymbol{a}(x)\}dx=\boldsymbol{k} \cdot \left( \int \boldsymbol{a}(x) dx \right)</math> #外積の原始関数<math>\int \{\boldsymbol{k}\times\boldsymbol{a}(x)\}dx=\boldsymbol{k} \times \left( \int \boldsymbol{a}(x) dx \right)</math> #スカラー倍の部分積分:<math>\int f(x)\boldsymbol{a}'(x)dx= f(x)\boldsymbol{a}(x)-\int f'(x)\boldsymbol{a}(x) dx \iff \int f'(x)\boldsymbol{a}(x)dx= f(x)\boldsymbol{a}(x)-\int f(x)\boldsymbol{a}'(x) dx</math> #内積の部分積分:<math>\int \{ \boldsymbol{a}(x)\cdot\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\cdot\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\cdot\boldsymbol{b}(x)\}dx</math> #外積の部分積分:<math>\int \{ \boldsymbol{a}(x)\times\boldsymbol{b}'(x) \}dx = \boldsymbol{a}(x)\times\boldsymbol{b}(x) - \int \{\boldsymbol{a}'(x)\times\boldsymbol{b}(x)\}dx</math> #置換積分:<math>u=f(x)</math>として<math>\int \boldsymbol{a}'\{f(x)\}f'(x) dx = \int \boldsymbol{a}(u)du</math> 平行条件の定理の証明でベクトル関数の微分方程式を解いたように、成分毎に考えることで解空間ベクトルを求められる。 :1階線型常微分方程式<math>\boldsymbol{f}'(x)+a(x)\boldsymbol{f}(x)=\boldsymbol{b}(x)</math>の解に就て考える。 :第<math>i</math>成分を考えると<math>f'_i(x)+a(x)f_i(x)=b_i(x)</math>という1階線型常微分方程式を得るので、 :両辺に積分因子<math>\mu(x)=\exp\left(\int a(x) dx\right)</math>を掛けることで :<math>f_i(x)=\frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\}</math>を得る。 :よって一般解は :<math>\boldsymbol{f}(x) = \sum_i \frac{1}{\mu(x)} \left\{ \int \mu(x) b_i(x) dx + C_i \right\} \boldsymbol{e}_i=\frac{1}{\mu(x)}\left\{ \int \mu(x) \boldsymbol{b}(x) dx + \boldsymbol{C} \right\}</math> ベクトル関数は必ずしもここで扱った<math>\boldsymbol{f}: \mathbb{R}\to\mathbb{R}^n</math>のみを指さない。 例えば、ベクトル変数 <math>\boldsymbol{x}= \sum_i g_i (x) \boldsymbol{e}_i</math>に対して :<math>\boldsymbol{h}(\boldsymbol{x})=\sum_i (h_i \circ g_i) (x) \boldsymbol{e}_i</math> と定義されるような関数<math>\boldsymbol{h}:\mathbb{R}^m \to \mathbb{R}^m</math>もベクトル関数である。 また、始域と終域の次元が異なる<math>\boldsymbol{i}: \mathbb{R}^m \to \mathbb{R}^n \, (m, n\neq1)</math>のようなベクトル関数も考えられる。 一般に、始域が<math>\mathbb{R}^n (n\neq1)</math>であっても終域が<math>\mathbb{R}</math>である関数はベクトル関数に対して'''スカラー関数'''(scalar function)と呼ばれる。スカラー関数は入力ベクトルを「変数の組」と見れば通常の多変数関数に一致する。 この節で述べた理論は、多くは一般のベクトル関数に対しても成り立つ。但し、後述のヤコビ行列のような拡張を必要とするものもある。 また、多変数ベクトル関数<math>\boldsymbol{f}(x_1, x_2,\cdots,x_n)</math>を考えたとき、多変数微積分の理論は一変数微積分と同様にしてベクトル関数にもそのまま拡張される。 ===ベクトル場・スカラー場=== 写像<math>\boldsymbol{a}: \mathbb{R}^m \to \mathbb{R}^n</math>を'''ベクトル場'''(vector field)という。 実際には<math>m=n</math>の場合を考えることが多い。 写像<math>\varphi: \mathbb{R}^n \to \mathbb{R}</math>を'''スカラー場'''(scalar field)という。 それぞれ上で述べたベクトル関数・スカラー関数に対応する。 もう少し具体的に述べると、空間の領域<math>V</math>が与えられたときその各点にスカラーまたはベクトルを割り当てたものが場である。要するに、<math>p\in V</math>とすると :スカラー場:<math>\varphi=\varphi(p)</math> :ベクトル場:<math>\boldsymbol{a}=\boldsymbol{a}(p)</math> のように場は「点を入力とする<sup>※</sup>関数」である。 <small>※なお、ベクトル場を図示するときは「出力されたベクトルの'''始点は原点でなく入力された点'''」であることに注意が必要である。出力ベクトルの成分表示は「入力点を基準に据えたときの位置ベクトル」なので原点から目盛を数えることに意味はない。</small> ここで<math>V</math>に何かしらの座標が設定されていれば、その座標系の変数の組をベクトルと見做すことで場を「通常のスカラー関数・ベクトル関数」として扱えるのである。 則ち、「滑らかな場」という概念は「滑らかな関数」として定義することができる。より具体的に言うと、スカラー場・ベクトル場が'''滑らか'''であるとは対応するスカラー関数・ベクトル関数が<math>C^\infty</math>級であることである。但し、滑らかさは任意の座標変換で保たれるわけではないことに注意が必要である(後述の座標変換テンソル及びその逆行列の全ての成分関数が滑らかである必要がある)。 ここで、二変数関数の極値を思い返してみる。 <math>z=f(x, y)</math>が<math>(a, b)</math>で極大であるとは<math>\begin{pmatrix} x \\ y \end{pmatrix}\neq\begin{pmatrix} a \\ b \end{pmatrix}</math>として :<math>\exist \delta>0, \forall {\scriptstyle\left(\begin{array}{c} x \\[-6pt] y \end{array}\right)} \in \mathbb{R}^2, {\scriptstyle\left\| \left(\begin{array}{c} x \\[-6pt] y \end{array}\right) - \left(\begin{array}{c} a \\[-6pt] b \end{array}\right) \right\|} < \delta \implies f(x, y) \leq f(a, b)</math> という定義だった。 <math>z=f(x, y)</math>は曲面を表すが、これを<math>z</math>軸正方向から<math>xy</math>平面に射影するとその陰が<math>(x, y)</math>の動く範囲となるのであった。 ここで<math>\boldsymbol{x}:=\begin{pmatrix} x \\ y \end{pmatrix}, \boldsymbol{\alpha}:=\begin{pmatrix} a \\ b \end{pmatrix}</math>とすると<math>z=f(x, y)</math>はスカラー場<math>z=\phi(\boldsymbol{x})</math>と解釈することができ、更に条件法の前件は<math>\boldsymbol{\alpha}</math>の<math>\delta</math>-開球(二次元なので開円板)である。 なので、極大値の定義式をベクトル解析的に解釈すると「<math>xy</math>平面の各点に<math>z</math>の値を割り当てた数分布に於いて、開円板<math>B_\delta(\boldsymbol{\alpha})</math>内部に於ける<math>z</math>の最大値が<math>\phi(\boldsymbol{\alpha})</math>となるような正数<math>\delta</math>が存在する」ということである。 ベクトル場の例としては、電場・磁場・重力場などが挙げられる。 スカラー場の例としては、電位分布・温度分布・圧力分布などが挙げられる。 例えば、ベクトル場<math>\boldsymbol{f}=(x, 0, 0)</math>は、<math>\mathbb{R}^3</math>内の平面<math>x=k</math>上の任意点に、その点を始点とするベクトル<math>\begin{pmatrix} k \\ 0 \\ 0 \end{pmatrix}</math>が存在する状態を表す。 ベクトル場の和は、出力ベクトルの型が同じならばベクトル場の成分の和をとったものに等しい。 例えば、<math>\boldsymbol{f}(x, y, z)=(y, z, x), \boldsymbol{g}(x, y, z)=(z, x, y)</math>について :<math>(\boldsymbol{f}+\boldsymbol{g})(x, y, z)=(y, z, x)+(z, x, y)=(y+z, z+x, x+y)</math>である。 これは、ベクトル場の加法の定義が :<math>\forall p \in V, (\boldsymbol{f}+\boldsymbol{g})(p):=\boldsymbol{f}(p)+\boldsymbol{g}(p)</math> となっていて且つ<math>V</math>に座標を入れればベクトル関数の加法則をそのまま適用できるためである(入力点が異なるとき、場同士は足すことができない)。 曲線<math>\{\boldsymbol{x}\in\mathbb{R}^2 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等高線'''(等高曲線)、曲面<math>\{\boldsymbol{x}\in\mathbb{R}^3 \mid \varphi(\boldsymbol{x})=\mathrm{const}.\}</math>を'''等位面'''(等位曲面)という。これらの詳細は後述する。 ==曲線論・曲面論== ===曲線=== <math>xy</math>平面上の曲線は<math>y=f(x) (x\in[a, b])</math>という陽関数表示で扱うことが多かった。しかし、これだと自分自身と交わる('''自己交叉'''する)曲線や<math>x=x_0</math>に対して<math>f(x_0)</math>の値が複数存在する(<math>f</math>が'''多価関数''')場合に不都合が生じる。 例えば円を陽関数表示しようとすると :<math>x^2+y^2=r^2</math>を<math>y</math>に就いて解いて :<math>y=\pm\sqrt{r^2-x^2}</math> 則ち :<math>y=\begin{cases} \sqrt{r^2-x^2} & (y\geq0) \\ -\sqrt{r^2-x^2} & (y<0) \end{cases}</math> という多価関数が必要になる。 これだと端点の振舞を一々調べる必要があって曲線の連続性や接線の議論が煩雑になってしまう。 しかし、先程も述べたように曲線の媒介変数表示はベクトル関数として見れるのであった。 :<math>\boldsymbol{r}(\theta) = r\begin{pmatrix} \cos\theta \\ \sin\theta \end{pmatrix}</math>(再掲) こうすると一変数連続ベクトル関数によって曲線を表すことが可能である。物理的に捉えると「質点の運動の軌跡を原点からの位置ベクトルの時間変化で表す」ということである。 一般に、<math>\boldsymbol{r}\in\mathbb{R}^n, t \in I</math>としてベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>の解集合<math>\{\boldsymbol{r}(t) \mid t \in I \}</math>は<math>n</math>次元空間内の曲線<math>C</math>を表す。これを<math>C</math>の'''ベクトル表示'''という。 ベクトル表示は成分表示に直せば<math>\boldsymbol{r}(t)=\sum_i r_i(t)\boldsymbol{e}_i</math>となる。これは媒介変数表示<math>\begin{cases} x_1&=&r_1(t) \\ x_2&=&r_2(t) \\ &\,\,\vdots& \\ x_n&=&r_n(t) \end{cases}</math>をベクトル表記したものに一致する。 例えば、<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ bt \end{pmatrix}</math>は'''常螺旋'''(弦巻線)のベクトル表示である。 パラメータが増加するときの点の移動方向を曲線の'''正の向き'''と定める。曲線の'''負の向き'''はパラメータが減少するときの点の移動方向である。このとき、パラメータで'''向き付け'''された曲線という表現もなされる。曲線<math>C</math>に対し、同じパラメータを用いた逆向きの曲線を<math>-C</math>と表す。ベクトル表示では<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>-C:\boldsymbol{r}=\boldsymbol{r}(-t)</math>ということである。 パラメータに関する変数変換<math>u=\phi(t)</math>を考える。但し、<math>\phi</math>は広義単調関数とする<sup>※</sup>。このとき、<math>\frac{du}{dt}</math>が非負ならば曲線の向き付けが保たれ、非正ならば向き付けが反転する。<math>\frac{du}{dt}=0</math>となる領域では点の運動が停止する。 <small>※<math>\phi</math>が非単調関数のときは曲線上の点が行ったり来たりすることになるため曲線のパラメータ表示としては扱いづらい。</small> <math>\boldsymbol{r}(t) \in C^1</math>且つ<math>\boldsymbol{r}'(t)\neq\boldsymbol{0}</math>であるとき、曲線<math>C</math>は'''滑らか'''であるという。 滑らかな曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>に対して<math>\boldsymbol{r}'(t)</math>を<math>C</math>の'''速度ベクトル'''という。 <math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}</math>として点<math>\mathrm{P}(t)</math>に於ける速度ベクトルは<math>\lim_{\Delta t\to0}\frac{\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)}{\Delta t}</math>の極限ベクトルであるが、<math>\boldsymbol{r}(t+\Delta t)-\boldsymbol{r}(t)</math>を図示することで速度ベクトルが曲線<math>C</math>の点<math>\mathrm{P}(t)</math>に於ける接線の方向ベクトルになっていることがわかる。よって、速度ベクトルを'''接線ベクトル'''(接ベクトル)ともいう。 速度ベクトルが非零である曲線を'''正則'''な曲線と呼ぶ。滑らかな曲線は正則曲線である。 なお、一般には陽関数表示が区分的であることとベクトル表示の成分関数が区分的であることに対応はないほか、パラメータの取り方で速度ベクトルが変わるので「曲線の幾何学的滑らかさ」と「ベクトル表示した関数の解析学的滑らかさ」は一致するとは限らない。 正則な曲線に対して曲線長('''弧長''')を考える。 二次元曲線の場合は数学Ⅲで既に扱った。 :<math>L=\int_a^b \sqrt{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2}dt</math> 実は、これを一般の<math>n</math>次元にそのまま拡張することができる。 {{定理|(弧長公式)}} 曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t)</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ(<math>a<b</math>)は :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> で与えられる。 {{定理終わり}} *証明 :<math>a=t_0, b=t_m</math>として閉区間<math>[a, b]</math>を各<math>t_i</math>で等分割する。このとき小区間<math>[t_{k-1}, t_k]</math>の長さは<math>\Delta t=\frac{b-a}{m}</math>。 :<math>C</math>の点<math>\mathrm{P}(a)</math>から点<math>\mathrm{P}(b)</math>までの長さ<math>L</math>は折れ線の長さ<math>\overline{\mathrm{P}(t_{k-1})\mathrm{P}(t_k)}</math>の総和で近似される。 :ここで<math>\overrightarrow{\mathrm{OP}}=\boldsymbol{r}(t)</math>より ::<math>L_m=\sum_{k=1}^m \| \boldsymbol{r}(t_k)-\boldsymbol{r}(t_{k-1}) \| = \sum_{k=1}^m \left\| \frac{\boldsymbol{r}(t_{k-1}+\Delta t)-\boldsymbol{r}(t_{k-1})}{\Delta t-0} \right\|(\Delta t-0)</math> :分割を限りなく細かくする極限をとると<math>m\to\infty</math>より<math>\Delta t\to0</math>なので ::<math>\lim_{m\to\infty} L_m = \sum_{k=1}^\infty \left\| \frac{d\boldsymbol{r}}{dt}(t_{k-1}) \right\|dt</math> :区分求積法より最後の無限級数は収束して :<math>L=\int_a^b \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>// ここで、<math>dl:=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>という微小量を'''線素'''と呼ぶ。 1を線素に関して積分したパラメータ<math>s:=\int_0^t dl</math>を'''弧長パラメータ'''(標準パラメータ)という。弧長パラメータは曲線上で「基準点からの符号付き距離」を表す。 曲線の弧長パラメータによるベクトル表示('''弧長パラメータ表示''')を考える。<math>s=\int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math>で正則よりノルムは正。則ち<math>\frac{ds}{dt}>0</math>より<math>s=\phi(t)</math>は狭義単調増加なので、逆関数<math>t=\phi^{-1}(s)</math>を考えることができる。よって、<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>に<math>t=\phi^{-1}(s)</math>を代入した<math>\boldsymbol{r}=\boldsymbol{r}(\phi^{-1}(s))</math>が弧長パラメータ表示である。これを<math>\boldsymbol{r}=\boldsymbol{r}(s)</math>と略記してしまうことも多いが、'''一般には元の<math>\boldsymbol{r}(t)</math>と成分関数が異なる'''ことに注意。 通常の媒介変数によるベクトル表示は「座標系が予め与えられた状況」での表示であるが、弧長パラメータは座標系を取り替えたとしても表す曲線そのものが変わらなければ不変である。よって、「座標系に依存しない表記」として弧長パラメータ表示は多く利用されている。 また、弧長パラメータ表示で連鎖律を適用すると :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{dt}{ds}=\frac{d\boldsymbol{r}(t)}{dt}\cdot\frac{1}{\frac{ds}{dt}}</math> ここで微分積分学の基本定理より :<math>\frac{ds}{dt}=\frac{d}{dt} \int_0^t \left\| \frac{d\boldsymbol{r}}{dt} \right\|dt = \left\| \frac{d\boldsymbol{r}}{dt} \right\|</math> なので :<math>\frac{d\boldsymbol{r}(s)}{ds}=\frac{\frac{d\boldsymbol{r}(t)}{dt}}{\left\| \frac{d\boldsymbol{r}}{dt} \right\|}</math> であり、自身のノルムで割ってるので恒等的に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>である。 よって、弧長パラメータ表示された曲線の接ベクトルは常に単位ベクトルである。 弧長パラメータ表示された曲線で線素を考えると<math>s=\int_0^s \left\| \frac{d\boldsymbol{r}(s)}{ds} \right\| ds = \int_0^s dl</math>だが、常に<math>\left\| \frac{d\boldsymbol{r}}{ds} \right\|=1</math>なので<math>ds=dl</math>であり、弧長パラメータの微小量は線素に等しい(弧長パラメータそのものが1の線素に関する積分なので当たり前ではある)。 <math>\boldsymbol{e}_\dagger(s)=\frac{d\boldsymbol{r}}{ds}</math>と置くと、点<math>\mathrm{P}(s_0)</math>に於ける接線の方程式は :<math>\boldsymbol{p}-\boldsymbol{r}(s_0)=\boldsymbol{e}_\dagger(s_0) (s-s_0)</math> と表される。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math> であり、「接線が一次近似に対応する」という構造はベクトル関数でも維持されることが判った。 領域<math>\boldsymbol{D}</math>上の滑らかなベクトル場<math>\boldsymbol{a}</math>について、微分方程式<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t)) (\boldsymbol{r} \in \boldsymbol{D})</math>で与えられる曲線<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>を<math>\boldsymbol{a}</math>の'''流線'''(streamline)という(入力点を位置ベクトルと同一視していることに注意)。流線の接線ベクトルは元のベクトル場そのものになるので、ベクトルの相等から得る方程式<math>\frac{dx_1}{a_1}=\frac{dx_2}{a_2}=\cdots=\frac{dx_n}{a_n}</math>を'''流線方程式'''という。 例えば、<math>\boldsymbol{f}(x, y)=(y, x)</math>の流線は、 :定義から<math>\frac{dx}{dt}=y, \frac{dy}{dt}=x</math> :合成関数の微分公式から<math>\frac{dy}{dx}=\frac{\frac{dy}{dt}}{\frac{dx}{dt}}=\frac{x}{y}</math> :<math>\int y dy=\int xdx</math> :<math>\frac{1}{2}y^2=\frac{1}{2}x^2+C</math> :よって双曲線<math>y^2-x^2=2C</math>// この場合、<math>t</math>に関する2つの微分方程式を組み合わせることで :<math>\frac{d^2x}{dt^2}=x, \frac{d^2y}{dt^2}=y</math>という二階線型常微分方程式となり、一般解が双曲線関数を用いて<math>\begin{cases} x=C_1\cosh t+C_2\sinh t \\ y=C_1\sinh t+C_2\cosh t \end{cases}</math>であることが容易に判る。<br>なお、流線方程式を用いても<math>\frac{dx}{y}=\frac{dy}{x}</math>から<math>\frac{dy}{dx}=\frac{x}{y}</math>が出てくる。 「流線の接線ベクトルが元のベクトル場になる」とはつまり、「接線が常にベクトル場と平行になるような曲線」を考えているということである。滑らかなベクトル場を考えているためそのような曲線は常に存在する。流線は「ベクトル場の流れを繋げていった曲線」と考えることができるので、「流れを簡潔に図示」するのにちょうどよい。 有名な例として、電気力線・磁力線はそれぞれ電場<math>\boldsymbol{E}</math>・磁束密度<math>\boldsymbol{B}</math>の流線である。 流線の微分方程式を弧長パラメータ表示を用いて変形する。 :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{a}(\boldsymbol{r}(t))</math>の左辺に就いて :<math>\frac{d\boldsymbol{r}}{ds}\cdot\frac{ds}{dt}=\frac{d\boldsymbol{r}}{ds}\cdot \|\boldsymbol{r}'(\phi^{-1}(s))\|</math> 元の方程式の両辺でノルムをとると :<math>\left\|\frac{d\boldsymbol{r}}{dt}\right\|=\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> 代入して :<math>\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{r}'(\phi^{-1}(s))\|=\frac{d\boldsymbol{r}}{ds}\cdot\|\boldsymbol{a}(\boldsymbol{r}(t))\|</math> :<math>\therefore \frac{d\boldsymbol{r}}{ds} = \boldsymbol{e}_{\boldsymbol{a}(\boldsymbol{r}(\phi^{-1}(s)))}</math> ここから、流線の形状はノルムには関係なく方向場のみで決まることがわかる。 ===フレネ標搆=== ここでは、三次元空間に於ける正則曲線について考える。 <math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>上の点<math>\mathrm{P}(s)</math>に於ける単位接線ベクトルを<math>\boldsymbol{t}</math>とおく。 先程の議論より<math>\boldsymbol{t}(s)=\frac{d\boldsymbol{r}(s)}{ds}</math>であり、<math>\left\| \frac{d\boldsymbol{r}(s)}{ds} \right\|=1 (=\mathrm{const}.)</math>なので直交条件の定理から<math>\boldsymbol{t}\cdot\frac{d\boldsymbol{t}}{ds}=0</math>、則ち<math>\boldsymbol{t} \perp \frac{d\boldsymbol{t}(s)}{ds}</math>である。この<math>\frac{d\boldsymbol{t}(s)}{ds}</math>を'''主法線ベクトル'''という。 主法線ベクトルを<math>\boldsymbol{n}</math>とおくとき、<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n}</math>を'''従法線ベクトル'''(陪法線ベクトル)という。ここで先程の結果より<math>\boldsymbol{t}\perp\boldsymbol{n}</math>であって<math>\boldsymbol{b}</math>の定義より<math>\boldsymbol{t}\perp\boldsymbol{b}, \boldsymbol{n}\perp\boldsymbol{b}</math>なので、この3ベクトルの組を正規化した<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b \}</math>は<math>\mathbb{R}^3</math>の正規直交基底である。これを<math>\mathbb{R}^3</math>の'''フレネ標搆'''という。外積の結果よりフレネ標搆は<math>\boldsymbol{e}_t, \boldsymbol{e}_n, \boldsymbol{e}_b</math>の順に右手系をなす。なお、接線ベクトル・主法線ベクトル・従法線ベクトルは全て曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>を入力したベクトル場として捉えることができる。 <math>\{\boldsymbol{e}_n, \boldsymbol{e}_b \}</math>の張る平面を'''法平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_b \}</math>の張る平面を'''展直平面'''、<math>\{\boldsymbol{e}_t, \boldsymbol{e}_n \}</math>の張る平面を'''接触平面'''という。 即ち、法平面・展直平面・接触平面は<math>tnb</math>空間の点<math>\mathrm{P}(s)</math>を原点とした基準面である。 平面の方程式の法線ベクトルに接ベクトル・主法線ベクトル・従法線ベクトルをそれぞれ代入することで :法平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{t}(s)=0</math> :展直平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{n}(s)=0</math> :接触平面の方程式:<math>(\boldsymbol{p}-\boldsymbol{r}(s))\cdot\boldsymbol{b}(s)=0</math> とわかる。 <math>\|\boldsymbol{t}\|=1</math>は常に成り立つが<math>\|\boldsymbol{n}\|, \|\boldsymbol{b}\|</math>は<math>1</math>とは限らない。そこで、主法線ベクトルの大きさ<math>\kappa(s)=\|\boldsymbol{n}(s)\|</math>を曲線<math>C</math>の'''曲率'''と呼ぶことにする。なお、<math>\|\boldsymbol{b}\|=\| \boldsymbol{t} \| \|\boldsymbol{n}\|\sin\frac{\pi}{2}</math>より<math>\|\boldsymbol{b}\|=\|\boldsymbol{n}\|=\kappa</math>が成り立つ。 主法線ベクトルの定義に立ち戻ると<math>\boldsymbol{n}(s)=\frac{d\boldsymbol{t}(s)}{ds}</math>であった。つまり、主法線ベクトルは接ベクトルの速度ベクトルなので「弧長パラメータを変化させたときに接ベクトルがどのくらい変化するか」という指標である。接ベクトルの変化の大小と<math>\kappa</math>の大小は対応し、接ベクトルの大小はカーブの緩急に対応することから<math>\kappa</math>の大小とカーブの緩急も対応する。これが「曲率」という名前の由来である。 なお、<math>\kappa(s)=0</math>の場合は<math>\boldsymbol{n}(s)=\boldsymbol{0}</math>なので<math>\boldsymbol{t}(s)=\boldsymbol{k}</math>(定ベクトル)であり、<math>\boldsymbol{r}(s)=s\boldsymbol{k}</math>という直線の場合に対応することがわかる。 単位接ベクトルの<math>s</math>を微分変数とする導関数(<math>s</math>-導関数)は主法線ベクトルだったが、単位主法線ベクトル・単位従法線ベクトルの<math>s</math>-導関数がどのように表されるか見ていく。 ここで、フレネ標搆が<math>\mathbb{R}^3</math>の正規直交基底であることから、<math>\frac{d\boldsymbol{e}_n}{ds}, \frac{d\boldsymbol{e}_b}{ds}</math>ともにフレネ標搆の一次結合で表現できると予想される。 単位従法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_b}{ds}=\frac{d}{ds}(\boldsymbol{e}_t\times\boldsymbol{e}_n)=\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n+\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\boldsymbol{t}=\boldsymbol{e}_t</math>より<math>\frac{d\boldsymbol{e}_t}{ds}=\boldsymbol{n}=\kappa\boldsymbol{e}_n</math>則ち<math>\frac{d\boldsymbol{e}_t}{ds}\times\boldsymbol{e}_n=\kappa\boldsymbol{e}_n\times\boldsymbol{e}_n=\boldsymbol{0}</math>なので :<math>\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds}</math> <math>\|\boldsymbol{e}_n\|=1</math>から直交条件の定理より<math>\boldsymbol{e}_n\perp\frac{d\boldsymbol{e}_n}{ds}</math>なので :<math>\boldsymbol{e}_n\times\frac{d\boldsymbol{e}_b}{ds}=\boldsymbol{e}_n\times(\boldsymbol{e}_t\times\frac{d\boldsymbol{e}_n}{ds})=\left(\boldsymbol{e}_n\cdot\frac{d\boldsymbol{e}_n}{ds}\right)-(\boldsymbol{e}_n\cdot\boldsymbol{e}_t)\frac{d\boldsymbol{e}_n}{ds}=\boldsymbol{0}</math> 外積が零ベクトルなので<math>\frac{d\boldsymbol{e}_b}{ds} /\!\!/ \boldsymbol{e}_n</math>であり、一次従属より :<math>\frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math> となるスカラー関数<math>\tau(s)</math>が存在する。 この<math>\tau(s)</math>を曲線<math>C</math>の'''捩率'''と呼ぶ。捩率は接触平面の回転(捩れ)の率を表す。 <math>\tau=0</math>ならば<math>\frac{d\boldsymbol{e}_b}{ds}=0</math>より<math>\boldsymbol{e}_b</math>方向は変化しないので曲線は接触平面と平行な平面上に拘束される。即ち、<math>C</math>は平面曲線である。 単位主法線ベクトルに就いて :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{d}{ds}(\boldsymbol{e}_b\times\boldsymbol{e}_t)=\frac{d\boldsymbol{e}_b}{ds}\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\frac{d\boldsymbol{e}_t}{ds}</math> ここで<math>\frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n, \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n</math>を代入して :<math>\frac{d\boldsymbol{e}_n}{ds}=-\tau\boldsymbol{e}_n\times\boldsymbol{e}_t+\boldsymbol{e}_b\times\kappa\boldsymbol{e}_n=\tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t</math> よって、フレネ標搆の弧長パラメータを微分変数とする導関数を以下のようにフレネ標搆の一次結合で表すことができた。 :<math>\begin{cases} \frac{d\boldsymbol{e}_t}{ds}=\kappa\boldsymbol{e}_n \\ \frac{d\boldsymbol{e}_n}{ds} = \tau\boldsymbol{e}_b-\kappa\boldsymbol{e}_t \\ \frac{d\boldsymbol{e}_b}{ds}=-\tau\boldsymbol{e}_n \end{cases}</math> これを一次変換で表記すると以下のようになる。但し、厳密にはベクトルを成分としている部分は列ではなく行に配置するのが正しいことに注意。 {{定理|(フレネ=セレーの公式)}} :<math>\frac{d}{ds}\begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix} = \begin{pmatrix} 0 & \kappa & 0 \\ -\kappa & 0 & \tau \\ 0 & -\tau & 0 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_t \\ \boldsymbol{e}_n \\ \boldsymbol{e}_b \end{pmatrix}</math> {{定理終わり}} 表現行列が反対称行列(歪対称行列)になっているが、これは「直交変換を一次近似すると反対称変換になる」という無限小回転の理論に対応する。 捩率を求めるときは「基底分解の係数は対応する基底ベクトルとの内積に等しい」という性質を利用すれば<math>\boldsymbol{e}_b\cdot\frac{d\boldsymbol{e}_n}{ds}=\tau</math>となるので左辺を計算すればよい。 例えば、円<math>\begin{cases} x^2+y^2=a^2 \\ z=b \end{cases}</math>の曲率と捩率は以下のように求まる。 :媒介変数表示して<math>\boldsymbol{r}(t)=\begin{pmatrix} a\cos t \\ a\sin t \\ b \end{pmatrix}</math> :接線ベクトルは<math>\frac{d\boldsymbol{r}(t)}{dt}=\begin{pmatrix} -a\sin t \\ a\cos t \\ 0 \end{pmatrix}</math> :弧長パラメータ<math>s</math>は<math>s=\int^t_0 \left\|\frac{d\boldsymbol{r}(t)}{dt}\right\|dt = \int_0^t a dt = at</math> :<math>\therefore t=\frac{s}{a}</math> :<math>\boldsymbol{r}(s)=\begin{pmatrix} a\cos\frac{s}{a} \\ a\sin\frac{s}{a} \\ b \end{pmatrix}</math> :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}(s)}{ds}=\begin{pmatrix} -\sin\frac{s}{a} \\ \cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{n}=\frac{d\boldsymbol{t}(s)}{ds}=\frac{1}{a}\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\kappa=\|\boldsymbol{n}\|=\frac{1}{a}</math> :<math>\boldsymbol{b}=\boldsymbol{t}\times\boldsymbol{n} = \begin{pmatrix} 0 \\ 0 \\ \frac{1}{a} \end{pmatrix}</math> :<math>\boldsymbol{e}_n=\begin{pmatrix} -\cos\frac{s}{a} \\ -\sin\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\frac{d\boldsymbol{e}_n}{ds}=\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}</math> :<math>\boldsymbol{e}_b = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}</math> :<math>\tau = \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}\cdot\frac{1}{a}\begin{pmatrix} \sin\frac{s}{a} \\ -\cos\frac{s}{a} \\ 0 \end{pmatrix}=0</math>// フレネ・セレーの公式は[[線型代数学続論/行列値関数|行列関数]]に関する一階常微分方程式である。そのため、微分方程式の基本定理(ピカール=リンデレーエフの定理)により初期条件(<math>s=0</math>に於けるフレネ標搆)を与えれば、滑らかな曲率関数・捩率関数の組<math>(\kappa, \tau)</math>を定めることで微分方程式の解として一般の<math>s</math>に対するフレネ標搆を一意に得る。このとき、曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)</math>は接ベクトルを出発点を選んで積分することで決定される。 従って、次の定理が成り立つ<!-- 厳密証明はhttps://sshmathgeom.private.coocan.jp/diffgeom/curvetheorem.htmlを参照 -->。 {{定理|(曲線の基本定理)}} 開区間<math>(a,b)</math>上の実数<math>s</math>を変数とする2つの滑らかな関数<math>\kappa(s),\tau(s)</math>を与える。但し、<math>\kappa(s)</math>は正とする。<br/> このとき、<math>\kappa(s)</math>を曲率、<math>\tau(s)</math>を捩率、<math>s</math>を弧長パラメータとする三次元空間上の曲線<math>C</math>が剛体運動を除いて一意に定まる。 {{定理終わり}} 剛体運動とは「曲線の形を変えない」運動のことである(平行移動・回転など)。 <math>\kappa(s), \tau(s)</math>の定める曲線族を一般に<math>\mathcal{C}[\kappa, \tau]</math>と書く。 例えば、円を含む螺旋は<math>c_1, c_2=\mathrm{const}.</math>として<math>\mathcal{C}[c_1, c_2]</math>と書ける。 <math>R=\frac{1}{\kappa}</math>を'''曲率半径'''という。曲率半径は曲線の特定のカーブにおける曲がり具合の急さを表す指標であり、カーブを近似する真円('''密着円''')の半径でもある。高速道路の標識で<math>R=\circ\circ \mathrm{m}</math>は、そのカーブの曲率半径を示している。道路設計では、快適なドライブの為曲率半径がなるべく大きくなるように工夫を凝らしている。 ここで<math>\boldsymbol{r}(s)</math>の中心<math>s_0</math>に於けるテイラー展開は :<math>\boldsymbol{r}(s)=\sum_{i=0}^\infty \frac{(s-s_0)^i}{i!} \frac{d^i}{ds^i}\boldsymbol{r}(s_0) </math>(再掲) だったが、二次近似式(三次以降を切り捨てた式)を考えると :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\frac{d\boldsymbol{r}(s_0)}{ds}(s-s_0) + \frac{1}{2}\frac{d^2\boldsymbol{r}(s_0)}{ds^2}(s-s_0)^2 </math> フレネ標搆を用いて書き直すと :<math>\boldsymbol{r}(s) \fallingdotseq \boldsymbol{r}(s_0)+\boldsymbol{e}_t(s-s_0) + \frac{1}{2}\kappa(s_0)\boldsymbol{e}_n(s-s_0)^2 </math> 二次近似とは「曲線を円弧で近似する」ことだったので曲率<math>\kappa(s_0)</math>が近似に用いる円弧と関係ある量であることが予想される。<br/> 接触平面で密着円<math> \| \boldsymbol{r} - (\boldsymbol{r}(s_0)+R\boldsymbol{e}_n) \| = R </math>を考える。接触平面を<math>xy</math>平面と考えると円の方程式は :<math>x^2+(y-R)^2=R^2</math> :<math>y=R-\sqrt{R^2-x^2}</math> テイラー展開して :<math>y=\frac{x^2}{2R}+O(x^4)</math> 二次の項を比較すると :<math>\frac{x^2}{2R}=\frac{(s-s_0)^2}{2}\kappa</math> よって :<math>R=\frac{1}{\kappa}</math> と定義するのは妥当である。 なお、先ほど求めた円の曲率から、真円に関して「曲率半径=半径」であることが判る。 フレネ・セレーの公式で最初の二行二列のみを考えると<math>\mathbb{R}^2</math>内の曲線に対するフレネ・セレーの公式を得る。一般に<math>\mathbb{R}^n</math>上の曲線に対し、今回の議論と同様にして接ベクトル・主法線ベクトル・曲率を定義することができる。但し、三次元空間と異なって同じ曲率に対して異なる曲線を与えることができる(主法線ベクトルが接触平面内で接ベクトルに対して左右どちらを向くかがそのままでは定まらないため)。なお、4次元以上であっても平面拘束曲線ならば捩率は0であって従法線ベクトルは零ベクトルに定まる。 ===単純閉曲線=== パラメータ区間を<math>I=[a, b]</math>とする。 このとき、曲線の端点はそれぞれ<math>\mathrm{P}(a), \mathrm{P}(b)</math>である。 端点が一致する、つまり<math>\mathrm{P}(a)=\mathrm{P}(b)</math>である連続曲線を'''閉曲線'''という。 自己交叉しない、つまり<math>\forall t_1, t_2 \in (a, b), t_1 \neq t_2 \iff \mathrm{P}(t_1)\neq\mathrm{P}(t_2)</math>となる閉曲線を'''単純閉曲線'''(ジョルダン曲線)という。閉曲線でない曲線に就いて「自己交叉しない」という条件は「曲線を表すベクトル関数が単射」と同値であるので、端点のみ単射性を外してやれば単純閉曲線の定義を得る。 幾何学的直観から、平面に拘束された単純閉曲線はその平面を単純閉曲線で囲まれた'''内部'''とそうでない'''外部'''の二つの領域に分割することが予想できる。 このことは以下の定理によって保証される。 {{定理|(ジョルダンの曲線定理)}} 平面<math>\Pi\subset\mathbb{R}^n</math>内の任意の単純閉曲線<math>\gamma</math>に対し、有界領域<math>I</math>・非有界領域<math>O</math>の組であって<math>\Pi\setminus\gamma=I \sqcup O</math>且つ<math>\partial{I}=\partial{O}=\gamma</math>であるものが唯一つに定まる。 {{定理終わり}} この<math>I, O</math>をそれぞれ内部・外部と定義する。証明は[[位相幾何学]]で行う。なお、「<math>\partial{I}=\partial{O}=\gamma</math>」を態々明示しているのは、滑らかでない単純閉曲線に対しては「<math>\Pi\setminus\gamma=I \sqcup O \implies \partial{I}=\partial{O}=\gamma</math>」が自明でないためである。 正則単純閉曲線に対して「曲線の向き」の幾何学的意味を考える。 ジョルダンの曲線定理より単純閉曲線<math>\gamma:\boldsymbol{r}=\boldsymbol{r}(s) \quad(\boldsymbol{r}\in \Pi)</math>は平面<math>\Pi</math>を内部<math>I</math>と外部<math>O</math>に分割する。平面拘束曲線なので<math>\forall{s}, \tau(s)=0</math>であり、従法線ベクトルは零ベクトル且つ接触平面が常に<math>\Pi</math>に一致する。 主法線ベクトル<math>\boldsymbol{n}(s)</math>が接ベクトル<math>\boldsymbol{t}(s)</math>に対して左側を向いているとすると、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0) \quad(\varepsilon>0)</math>が点<math>\mathrm{P}(s_0)</math>に於ける<math>\gamma</math>の進行方向左側にある点である。 ここで、<math>\mathrm{P}(s_0)</math>に於ける<math>\varepsilon</math>-開球<math>B_\varepsilon(s_0)</math>を考えると、平面<math>\Pi</math>上では<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が左側の領域、<math>\boldsymbol{r}(s_0)+\varepsilon\boldsymbol{n}(s_0)</math>が右側の領域に入る。 <math>s=s_0</math>を動かすと各点で進行方向左は<math>I, O</math>のいずれかであり、<math>\gamma</math>の正則性と<math>I, O</math>の連結性から「<math>I, O</math>のどちらが左側であるかは曲線全体で変わらない」ことが言える。 ここで円の場合を考える。<math>\Pi</math>に直交座標<math>u, v</math>を入れると向心加速度の議論から「加速度ベクトル=主法線ベクトルは円の中心を向く」ので、「円の正の向きは円の内部を左手に見る進行方向」である。 任意の正則単純閉曲線<math>\gamma</math>に対して自己交叉を起こさないまま円へ連続変形する可逆写像が存在し、その変形に於いて「左側」と「<math>I, O</math>」の対応は変化しない。則ち、円で確認された「正の向きは囲まれた内部を左手に見る向き」は任意の正則単純閉曲線で成り立つ。 つまり、単純閉曲線の正の向きは点を動かしたときに'''自身の囲む領域の内部を左手に見る向き'''である。負の向きは左手に外部を見る向きである。 集合<math>A</math>に含まれる任意の2点に対してそれらを端点とする滑らかな曲線<math>C</math>をとれるとき、<math>A</math>は'''弧状連結'''であるという。 弧状連結集合<math>S</math>内の任意の閉曲線<math>\gamma</math>に対して1点に退化するような連続変形が可能なとき、<math>S</math>は'''単連結'''であるという。単連結でない集合は'''多重連結'''であるという。 平面<math>\Pi\subset\mathbb{R}^n</math>に含まれる単連結集合<math>S</math>に対し、<math>\hat{\Pi}:=\Pi\cup\{\infty\}</math>とすると集合<math>\hat{\Pi}\setminus{S}</math>は連結である。逆も成り立つ。 なお、「<math>A</math>が連結集合である」ことは「補集合<math>\overline{A}</math>が非連結集合である」ことを意味しない。そのため「単連結な連結集合」も考えられ、特に「単連結な領域」はこの先頻繁に登場する。 集合<math>A</math>に含まれる任意の2点を結んだ線分が<math>A</math>に包含されるとき、<math>A</math>は'''凸型'''であるという。凸型集合でない集合は'''凹型'''であるという。 集合<math>A</math>内の1点を固定してそこから<math>A</math>内任意点へ引いた線分が<math>A</math>に包含されるとき、<math>A</math>は'''星状'''(星型)であるという。このとき固定した点を'''星の中心'''という。凸型集合は全て星状集合である。 単純閉曲線<math>\gamma</math>を境界とする内部<math>I</math>に関して<math>I\cup\gamma</math>が凸型集合であるとき、<math>\gamma</math>を'''卵形線'''(凸単純閉曲線・オーヴァル)という。 曲線<math>C</math>の曲率関数<math>\kappa(s)</math>が<math>C^3</math>級であるとき、<math>\kappa'(s_0)=0</math>を満たす点<math>\mathrm{P}(s_0)</math>を<math>C</math>の'''頂点'''という。 例えば、標準楕円<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}=1</math>の頂点は4点<math>(\pm{a},0),(0,\pm{b})</math>である。このことは、<math>\mathbb{R}^2</math>上曲線<math>C:\boldsymbol{r}=x(t)\boldsymbol{e}_x(t)+y(t)\boldsymbol{e}_y(t)</math>に対する曲率の公式<math>\kappa(t)=\frac{\left|\frac{dx}{dt}\frac{d^2y}{dt^2}-\frac{dy}{dt}\frac{d^2x}{dt^2}\right|}{\left\{\left(\frac{dx}{dt}\right)^2+\left(\frac{dy}{dt}\right)^2\right\}^\frac{3}{2}}</math>と<math>\frac{ds}{dt}>0</math>を用いて確かめられる。 実は、この事実は楕円に限らないことが以下の定理で示される。 {{定理|(ムコパディヤーヤの定理・四頂点定理)}} <math>\mathbb{R}^2</math>上の滑らかな卵形線は少なくとも4つの頂点を持つ。 {{定理終わり}} *証明 :滑らかな卵形線<math>C:\boldsymbol{r}=\boldsymbol{r}(s)\quad(s\in[a, b])</math>に対して曲率関数<math>\kappa(s)</math>は滑らかであり、<math>\kappa\in C^3</math>を満たす。 :卵形線は単純閉曲線なので<math>\mathrm{P}(a)=\mathrm{P(b)}</math>であり、<math>\kappa(a)=\kappa(b)</math>。 :曲率関数が定数関数のときは<math>\kappa\in C^\infty</math>且つ常に<math>\kappa'(s)=0</math>なので曲線を構成するすべての点が頂点であり、明らかに定理を満たす。 :曲率関数が定数関数でないとする。 :ワイエルシュトラスの極値定理より<math>\kappa(s)</math>は<math>s\in[a, b]</math>のどこかで最大値・最小値をとり、その点で<math>\kappa'(s)=0</math>を満たす。 :従って少なくとも2つの頂点を持つ。 :ここで、頂点がこの2つのみと仮定する。 :曲率が最大値・最小値をとる点をそれぞれ<math>\mathrm{M, N}</math>と置く。 :線分<math>\mathrm{MN}</math>を含む直線を<math>x</math>軸とし、その垂直方向に<math>y</math>軸をとる。 :<math>s</math>が増加すると曲線上の点が<math>\mathrm{N}\to\mathrm{M}</math>のように動くとき、 :<math>\kappa(s)</math>は最小値から最大値に向かって増大し、他に頂点がないので狭義単調増加である。 :同様に、<math>\mathrm{M}\to\mathrm{N}</math>の向きでは<math>\kappa(s)</math>は狭義単調減少である。 :従って、<math>\kappa'(s)y(s)\neq0</math>の正の側だけ考えれば良い。 :<math>y(a)=y(b)=0</math>に注意すると部分積分して :<math>0<\int_a^b \kappa'(s)y(s)ds=-\int_a^b \kappa(s)y'(s)ds</math> :主法線ベクトル<math>\boldsymbol{n}(s)= \begin{pmatrix} \xi_1(s) \\ \xi_2(s) \end{pmatrix}</math>を考えると二次元版フレネ=セレーの公式から<math>\frac{d\boldsymbol{n}}{ds}=-\kappa\frac{d\boldsymbol{r}}{ds}</math>なので :<math>\xi'_2(s)=-\kappa(s)y'(s)</math> :よって :<math>-\int_a^b \kappa(s)y'(s)ds=\int_a^b \xi_2(s)ds = \left[\xi_2(s)\right]_a^b=0</math> :なので矛盾した不等式<math>0<0</math>を得る。 :則ち、<math>\mathrm{M, N}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在する。 :そのような点を<math>\mathrm{L}</math>と置く。 :<math>\mathrm{L}</math>が<math>\mathrm{N}\to\mathrm{M}</math>という経路の途中にあるとする。 :このとき、<math>\mathrm{L}</math>以外に<math>\kappa'(s)=0</math>を満たす点が存在すると「<math>\mathrm{M}\to\mathrm{N}</math>という経路の途中にそのような点が無い」という最初の仮定に反するので :<math>\mathrm{M, N, L}</math>以外では<math>\kappa'(s)y(s)>0</math>である。 :同様に部分積分を行うことで矛盾した不等式を得、<math>\mathrm{M, N, L}</math>と異なる点で<math>\kappa'(s)=0</math>を満たす点が少なくとも一つ存在することが判る。 :この時点で「<math>\mathrm{M, N}</math>間の二つの経路のいずれにも<math>\kappa'(s)=0</math>を満たす点が存在しない」という仮定が否定されたのでこれ以上背理法を適用することはできない。 :よって、頂点個数の最小値は<math>4</math>である。// 最小値4をとる卵形線が実際に存在することは楕円の例で確かめた。 この定理は「卵形線」を「(正則)単純閉曲線」に取り換えてもそのまま成り立つことが知られている。一般の閉曲線でこの定理を成り立たせるには追加の条件が必要となる。 先程も述べたように、接ベクトルと単位主法線ベクトルは2次元以上の空間内部にある曲線ならば定義することができる。そして、<math>\boldsymbol{t}\cdot\boldsymbol{n}=0</math>も必ず成り立つ。よって、<math>\boldsymbol{e}_t\cdot\boldsymbol{e}_n=0</math>の両辺を<math>s</math>で微分して :<math>\frac{d\boldsymbol{e}_t}{ds}\cdot\boldsymbol{e}_n+\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=0</math> :<math>\therefore \boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\boldsymbol{n}\cdot\boldsymbol{e}_n=-\kappa</math> ここで「基底分解に於ける成分はその基底との内積に等しい」という性質から、<br/> 一般次元に於いても「<math>\frac{d\boldsymbol{e}_n}{ds}</math>の接線方向成分は<math>-\kappa(s)</math>」であることが判る。 ここで<math>C^2</math>級曲線の位置ベクトル<math>\boldsymbol{r}(s)</math>に対して単位主法線<math>\boldsymbol{e}_n(s)</math>を対応させることを考える。この対応を'''ガウス表示'''という。 <math>\boldsymbol{e}_n(s)</math>を二次までテイラー展開すると<math>\Delta s>0</math>を微小量として :<math>\boldsymbol{e}_n(s+\Delta s)=\boldsymbol{e}_n(s)+\frac{d\boldsymbol{e}_n(s)}{ds}\Delta s + O(\Delta s^2)</math> ここで<math>\boldsymbol{e}_t\cdot\frac{d\boldsymbol{e}_n}{ds}=-\kappa</math>より、<math>s</math>を<math>\Delta s</math>だけ動かしたときの接線方向の速さは<math>|\kappa(s)|\Delta s</math>である(<math>\kappa(s)</math>が正で正の向き、負で負の向きに動くとする)。 閉曲線に対してはガウス表示によって法線方向の変化を完全に捉えられるので、<math>\kappa(s)</math>を微小量<math>\Delta s</math>に関して積分した<math>\int_a^b \kappa(s)ds</math>を考えてみる。 ガウス表示では曲線を単位主法線ベクトルの描く単位円として考えることができる。閉曲線では<math>\mathrm{P}(a)=\mathrm{P}(b)</math>より明らかに<math>\boldsymbol{e}_n(a)=\boldsymbol{e}_n(b)</math>であり、閉曲線が一周する間にベクトル<math>\boldsymbol{e}_n(s)</math>はこの単位円を<math>m(\in\mathbb{Z})</math>周する<sup>※</sup>。 <small>※物理的には「円そのものが動いても円周上の質点は『この円をどっちの方向に何周したか』という情報しか持たない」ので、単位円が動くことは議論にあまり関係ない</small> 弧度法より単位円を<math>m</math>周する符号付き道のりは<math>2\pi{m}</math>であり、ガウス表示より<math>\int_a^b \kappa(s)ds=2\pi{m}</math>。 従って、<math>m=\frac{1}{2\pi}\int_a^b \kappa(s)ds</math> この<math>m</math>を閉曲線の'''回転数'''と呼ぶことにする。 曲率が負の場合には積分値が途中で相殺されてしまうので、絶対値を付けて積分した :<math>\mu:=\int_a^b |\kappa(s)|ds</math> という量を考えることにする。 これを閉曲線の'''全曲率'''と呼ぶ。 全曲率に対して以下の定理が成り立つ。 {{定理|(フェンヒェルの定理)}} 滑らかな閉曲線の全曲率は<math>\mu\geq2\pi</math>を満たす。等号成立の場合は卵形線である。 {{定理終わり}} 証明は省略する。 ===曲面=== 多変数解析で既に扱った、三次元空間に於ける曲面の陽関数表示<math>z=f(x, y)</math>を'''モンジュ表示'''という。<math>f(x, y, z)=\mathrm{const}.</math>と陰関数表示された曲面は陰関数定理が成り立つ範囲でモンジュ表示に直すことができる。 一次式で陰関数表示される曲面を'''一次曲面'''という。平面の方程式より、一次曲面は全て平面である。 二次式で陰関数表示される曲面を'''二次曲面'''という。 以下、三次元空間に於ける二次曲面の例を挙げる。各係数は非退化条件を満たすとする。なお、「直線に平行な平面」は「直線を法線とする平面に垂直な平面」を意味することに注意。 *'''球面'''(sphere) :高校数学で扱ったように、点<math>(a, b, c)</math>を中心とする半径<math>r</math>の球面の方程式は<math>(x-a)^2+(y-b)^2+(z-c)^2=r^2</math>である。この球面上の点の位置ベクトルは<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>なので、球面が満たすベクトル方程式は一般に<math>\|\boldsymbol{r}-\boldsymbol{a}\|=\mathrm{const}.</math>である。これは円のベクトル方程式の次元を上げたものである。 *'''楕円面'''(ellipsoid) :楕円の方程式を拡張した方程式<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}=1</math>が表す曲面である。<math>xyz</math>空間の基本面で切った断面は全て楕円となる。 *'''楕円拋物面'''(elliptic paraboloid) :楕円の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は拋物線となる。 *'''双曲拋物面'''(hyperbolic paraboloid) :双曲線の平面拘束条件を外した方程式<math>z=\frac{x^2}{a^2}-\frac{y^2}{b^2}</math>が表す曲面である。<math>z</math>軸に垂直な平面で切った断面は双曲線、平行な平面で切った断面は拋物線となる。また、原点は鞍点である。 *'''一葉双曲面'''(hyperboloid of one sheet) :楕円面の方程式の一つの項の符号を変えた<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。<math>z</math>軸に垂直な平面で切った断面は楕円、平行な平面で切った断面は双曲線となる。 *'''二葉双曲面'''(hyperboloid of two sheet) :楕円面の方程式の二つの項の符号を変えた<math>\frac{x^2}{a^2}-\frac{y^2}{b^2}-\frac{z^2}{c^2}=1</math>の表す曲面。断面の分類は一葉双曲面と同じだが、<math>m^2<c^2</math>のときは平面<math>z=m</math>と交わらないため「二葉」と名付けられている。 *'''錐面'''(conical surface) :方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>の表す曲面。<math>xy</math>平面との交点は原点のみであり、<math>yz</math>平面・<math>zx</math>平面で切った断面は直線である。 閉区間<math>I\subset\mathbb{R}</math>上の一変数ベクトル関数<math>\boldsymbol{r}(t)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t) \quad(t\in I)</math>の解集合は次元に依らず曲線を表した。 同様に、領域<sup>※</sup><math>D\subset\mathbb{R}^2</math>上の二変数ベクトル関数<math>\boldsymbol{r}(t, u)</math>を用いたベクトル方程式<math>\boldsymbol{r}=\boldsymbol{r}(t, u) \quad({\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)}\in D)</math>の解集合は次元に依らず曲面を表すと考えられる。 厳密には[[線型代数学/基底と次元|階数・退化次数の定理]]<!-- 次元定理・線型写像の基本定理 -->などを用いてこのことを確かめられる。 <small>※ここでいう「領域」は冒頭で厳密に定義した「領域」であることに注意。</small> 曲線と同様に、曲面の'''パラメータ表示'''と'''ベクトル表示'''は次のように定義される。 :パラメータ表示:<math>\begin{cases} x_1&=&r_1(t, u) \\ x_2&=&r_2(t, u) \\ &\,\,\vdots& \\ x_n&=&r_n(t, u) \end{cases}</math> :ベクトル表示:<math>\left\{\boldsymbol{r}(t, u) \,\bigg|\, {\scriptstyle\left(\begin{array}{c} t \\[-6pt] u \end{array}\right)} \in D \right\}</math> また、<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>のようにも表す。 例えば、<math>k>l>0</math>として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (k+l\cos u)\cos t \\ (k+l\cos u)\sin t \\ l\sin u \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq 2\pi \\ 0 \leq u \leq 2\pi \end{array} \right\})</math>は'''トーラス'''のベクトル表示である。 <math>\mathbb{R}^3</math>上の平面の方程式は高校数学に於いて<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>として一次式<math>ax+by+cz+d=0</math>と表せることを学んだ。 これのベクトル方程式を求めてみよう。 :①<math>c=0</math>のとき ::平面の方程式は<math>\begin{cases} ax+by+d=0 \\ z=\mathrm{const}. \end{cases}</math> ::[1]<math>b=0</math>のとき :::平面の方程式は<math>\begin{cases} ax+d=0 \\ y=\mathrm{const}. \\ z=\mathrm{const}. \end{cases}</math> :::<math>\begin{pmatrix} a \\ b \\ c \end{pmatrix}\neq\boldsymbol{0}</math>より<math>a\neq0</math> :::<math>y=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} -\frac{d}{a} \\ t \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 0 \\ 1 \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} -\frac{d}{a} \\ 0 \\ 0 \end{pmatrix}</math> ::[2]<math>b\neq0</math>のとき :::<math>x=t, z=u</math>と置換すると :::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}=\begin{pmatrix} t \\ -\frac{a}{b}t-\frac{d}{b} \\ u \end{pmatrix}</math> :::<math>\boldsymbol{r} = t\begin{pmatrix} 1 \\ -\frac{a}{b} \\ 0 \end{pmatrix}+u\begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}+\begin{pmatrix} 0 \\ -\frac{d}{b} \\ 0 \end{pmatrix}</math> :②<math>c\neq0</math>のとき ::<math>x=t, y=u</math>と置換すると ::<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} t \\ u \\ -\frac{a}{c}t-\frac{b}{c}u-\frac{d}{c} \end{pmatrix}</math> ::<math>\boldsymbol{r}=t\begin{pmatrix} 1 \\ 0 \\ -\frac{a}{c} \end{pmatrix}+u\begin{pmatrix} 0 \\ 1 \\ -\frac{b}{c} \end{pmatrix} + \begin{pmatrix} 0 \\ 0 \\ -\frac{d}{c} \end{pmatrix}</math> なお、ここから平面のベクトル方程式が一般に<math>\boldsymbol{r}=\boldsymbol{a}+t\boldsymbol{b}+u\boldsymbol{c}</math>という「直線のベクトル方程式を拡張した形」であることがわかる。 <math>\boldsymbol{r}(t, u)\in C^1</math>且つ<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}\neq\boldsymbol{0}</math>である曲面を'''滑らか'''な曲面という。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>とその上の点<math>\mathrm{P}_0=(a, b)</math>に対し、曲線<math>\boldsymbol{r}=\boldsymbol{r}(a, u), \boldsymbol{r}=\boldsymbol{r}(t, b)</math>をそれぞれ点<math>\mathrm{P}_0</math>に於ける'''<math>t</math>曲線'''・'''<math>u</math>曲線'''という。 <math>\boldsymbol{r}(t, u)\in C^1</math>であるとき、偏導関数の定義から :<math>\frac{\partial}{\partial{u}}\boldsymbol{r}(a, u)=\frac{d}{du}\boldsymbol{r}(a, u)</math> :<math>\frac{\partial}{\partial{t}}\boldsymbol{r}(t, b)=\frac{d}{dt}\boldsymbol{r}(t, b)</math> ここで<math>a, b</math>をそれぞれ<math>t</math>軸・<math>u</math>軸上で動かすことで<math>t</math>曲線・<math>u</math>曲線の接ベクトルがそれぞれ<math>\frac{\partial{\boldsymbol{r}}}{\partial{u}}, \frac{\partial{\boldsymbol{r}}}{\partial{t}}</math>であると判る。これらを曲面のパラメータ方向の'''接ベクトル'''という。 これらの接ベクトルが平行でないとき、曲面<math>S</math>上の任意の点<math>\mathrm{P}</math>に対して<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>の張る平面が定まる。これを曲面<math>S</math>の点<math>\mathrm{P}</math>に於ける'''接平面'''という。曲線の接線は一次元ベクトル空間<math>\left\{ \xi\frac{d\boldsymbol{r}}{dt} \bigg| \xi \in\mathbb{R} \right\}</math>で表されたが、曲面の接平面は二次元ベクトル空間<math>\left\{ \xi\frac{\partial{\boldsymbol{r}}}{\partial{t}}+\eta\frac{\partial{\boldsymbol{r}}}{\partial{u}} \bigg| \xi, \eta \in \mathbb{R} \right\}</math>で表される。このような接ベクトル全体が張るベクトル空間を一般に'''接空間'''と呼ぶ。 接ベクトルの組が一次独立である曲面を'''正則'''な曲面という。滑らかな曲面は正則曲面である。 曲面<math>S</math>の接平面に垂直なベクトルを<math>S</math>の'''法線ベクトル'''という。 三次元空間ならば接平面を張る2ベクトルの外積<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}} \times \frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>で求められる。 モンジュ表示された曲面<math>S:z=f(x, y)</math>に対して接平面の存在性(つまり曲面の正則性)は「二変数関数<math>f</math>の全微分可能」に対応した。ベクトル表示された曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>に対しては「ベクトル関数<math>\boldsymbol{r}</math>の全微分可能性」だけでは足りず、「ヤコビ行列<math>\frac{\partial{(\boldsymbol{r})}}{\partial{(t, u)}}</math>の階数が2」も要求される。 以下、正則曲面のみ扱う。 <math>\boldsymbol{r}(t, u)</math>の微小変化は全微分で与えられる。 :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> 則ち、各パラメータを同時に<math>\begin{pmatrix} t \\ u \end{pmatrix}\to\begin{pmatrix} t+dt \\ u+du \end{pmatrix}</math>と単調に動かしたとき、対応する曲面上の点が描く領域は2ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt, \frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行四辺形として近似できる。その微小面積は線型代数の内容から :<math>\sqrt{ \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}}dt \right\|^2 \left\| \frac{\partial{\boldsymbol{r}}}{\partial{u}}du \right\|^2 - \left\{ \left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right) \right\}^2 }=\sqrt{\left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2 - \left( \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \right)^2 } dtdu</math> である。 これを領域<math>D=\mathrm{dom}\,S</math>で重積分してやれば曲面の表面積('''曲面積''')が求まると考えられる。 {{定理|(曲面積)}} <math>E := \left\| \frac{\partial{\boldsymbol{r}}}{\partial{t}} \right\|^2,\quad F := \frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}},\quad G := \left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2</math>とすると、<br> 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>の領域<math>D</math>に於ける曲面積は :<math>S=\iint_D \sqrt{EG-F^2}dtdu</math> {{定理終わり}} この<math>E, F, G</math>を<math>S</math>の'''第一基本量'''と呼ぶ。また、<math>dS:=\sqrt{EG-F^2}dtdu</math>を'''面素'''(面積素・面積要素)と呼ぶ。 <math>t, u</math>が共通のパラメータ<math>\theta</math>で媒介変数表示されるとき、曲面は曲線に退化するので線素を考えられる。 具体的には、 :<math>dl=\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|d\theta</math> より :<math>\left\|\frac{d\boldsymbol{r}}{d\theta}\right\|^2=\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}</math> ここで合成関数の常微分公式より :<math>\frac{d\boldsymbol{r}}{d\theta}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{d\theta}+ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{d\theta}</math> なので :<math>\frac{d\boldsymbol{r}}{d\theta}\cdot\frac{d\boldsymbol{r}}{d\theta}=\left\|\frac{d\boldsymbol{r}}{dt}\right\|^2\left(\frac{dt}{d\theta}\right)^2+2\left(\frac{d\boldsymbol{r}}{dt}\cdot\frac{d\boldsymbol{r}}{du}\right)\frac{dt}{d\theta}\frac{du}{d\theta}+\left\|\frac{d\boldsymbol{r}}{du}\right\|^2\left(\frac{du}{d\theta}\right)^2</math> :<math>=E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2</math> よって :<math>dl=\sqrt{E\left(\frac{dt}{d\theta}\right)^2+2F\frac{dt}{d\theta}\frac{du}{d\theta}+G\left(\frac{du}{d\theta}\right)^2}d\theta=\sqrt{E(dt)^2+2Fdtdu+G(du)^2}</math> このように、線素は<math>\theta</math>のとり方に依存しない。 そこで、最後の式で右辺を二乗した :<math>I:=E(dt)^2+2Fdtdu+G(du)^2</math> を<math>S</math>の'''第一基本形式'''と定める。 第一基本形式は二次形式になっていることが見て取れるので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{K}:=\begin{pmatrix} E & F \\ F & G \end{pmatrix}</math>とおくと :<math>I={}^t\!\boldsymbol{v} \mathbf{K} \boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{K}</math>を'''第一基本行列'''という。 ここで<math>I=dl^2>0</math>なので<math>\mathbf{K}</math>は正定値行列である。 また、<math>\boldsymbol{x}_i=\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{x}_j=\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>と置いて第一基本量の定義を思い返してみると<math>\mathbf{K}_{ij}=\boldsymbol{x}_i \cdot \boldsymbol{x}_j</math>なのでこの行列は接ベクトルに関するグラム行列である。この意味でも、<math>\mathbf{K}</math>は正定値行列である。 また、面素の式で根号の中身が<math>\det\mathbf{K}</math>に等しいことも判る。 則ち、第一基本量が曲面の本質であると予想される。 <math>F=0 \land E=G=\lambda</math>であるとき、<math>\mathbf{K}=\lambda\mathbf{E}_2</math>である。このときのパラメータの組<math>(u, v)</math>を曲面の'''等温座標系'''という。 等温座標系で表示された曲面<math>S</math>に対し、第一基本形式は<math>I=\lambda(dt^2+du^2)</math>と二次形式の標準形となっている。則ち、等温座標系へのパラメータ変換は主軸変換である。 面素を考えると<math>dS=\lambda^2dtdu</math>と非常に単純な形となるほか、曲面上の角度計算が平面の場合と全く同じ式で与えられることも等温座標系の利点である。 曲面<math>S</math>上の各点<math>\mathrm{P}</math>に対して単位法線ベクトル<math>\boldsymbol{n}(\mathrm{P})</math>を考える。ベクトル表示の定義域<math>D</math>でベクトル場<math>\boldsymbol{n}(\mathrm{P})</math>が連続であるとき、<math>S</math>は'''向き付け可能'''であるという。 向き付け不能な曲面の例として<math>\boldsymbol{r}(t, u)=\begin{pmatrix} (u\cos t+2)\sin 2t \\ (u\cos t+2)\cos 2t \\ u\sin t \end{pmatrix} \quad(D=\left\{ \begin{pmatrix} t \\ u \end{pmatrix} \bigg| \begin{array}{c} 0 \leq t \leq \pi \\ -1 \leq u \leq 1 \end{array} \right\})</math>と表される'''メビウスの帯'''が挙げられる。 メビウスの帯が向き付け不能である証明を概説する。 :接ベクトルをそれぞれ求める。簡単のため<math>u=0</math>として考える。単位法線ベクトルは外積を正規化して得るが、向きの取り方で正負の符号が付く。どちらの符号を採用するにしろ<math>\boldsymbol{n}(\boldsymbol{r}(0, 0))\neq\boldsymbol{n}(\boldsymbol{r}(\pi, 0))</math>を得、<math>\boldsymbol{r}(0, 0)=\boldsymbol{r}(\pi, 0)</math>より同じ点に対して異なる法線ベクトルを出力するので<math>\boldsymbol{n}(\mathrm{P})</math>はwell-definedではなく、向き付け可能性の定義を満たさない。// 四次元以上の空間では法線ベクトルの方向を複数とれるため法線ベクトル場は扱いにくい。そこで、法線ベクトルに依らない定義を考えたい。 2つの滑らかな曲面<math>S_1, S_2</math>が以下を満たすとき、 #パラメータ<math>(t_1, u_1), (t_2, u_2)</math>の間に滑らかな全単射<math>\begin{cases}t_2 =\phi(t_1, u_1) \\ u_2=\psi(t_1, u_1) \end{cases}</math>が存在する。 #この変数変換のヤコビ行列<math>\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}</math>が正則。 #<math>\boldsymbol{r}_1(t_1, u_1)=\boldsymbol{r}_2(t_2, u_2)</math> この2つは'''パラメータ変換で同値'''という。 このとき、ヤコビアンが正であるパラメータの組は'''同じ向き'''、負であるパラメータの組は'''逆向き'''であるという。 任意の<math>(t_1, u_1)</math>に対して開近傍<math>U \subset \mathrm{dom}\,S_1</math>をとったとき、どの<math>U</math>上でも<math>\det\frac{\partial{(\phi, \psi)}}{\partial{(t_1, u_1)}}>0</math>を満足するならば<math>S_1</math>は'''向き付け可能'''という。 向き付け可能な曲面の接空間に対して右手系を成すような向きの法線ベクトルを'''外向き法線ベクトル'''と呼ぶ。 外向き法線の向く側を曲面の'''表'''、その反対側を曲面の'''裏'''と定義する。 <math>\partial{S}=\varnothing</math>を満たす正則曲面<math>S</math>を'''閉曲面'''という。ジョルダンの曲線定理を拡張した定理('''ジョルダン・ブラウワーの分離定理''')によって閉曲面が空間を内部・外部に分割することが保証される。内部に面する向きを閉曲面の裏、外部に面する向きを閉曲面の表と定義する。 パラメータ空間の座標軸の向きの組み合わせが<math>xy</math>平面と同じとき、外向き法線で定義される閉曲面の表裏は内部・外部から定義される表裏に一致する。 ===回転面=== ここでは三次元空間内の曲面について考える。 高校数学で回転体を扱ったが、領域の回転体の表面である曲面は元の領域の疆界である単純閉曲線を軸に関して回転したものである。そこで、平面上の任意の曲線を回転すると曲面('''回転面''')を得ると考えられる。 簡単な場合として、<math>x\geq0</math>で定義された<math>zx</math>平面上の曲線<math>z=f(x)</math>を<math>y</math>軸に関して回転させた回転面を考える。 :任意の<math>k\in[0,\infty)</math>に関して曲線上の点は<math>\begin{pmatrix} x \\ z \end{pmatrix}=\begin{pmatrix} k \\ f(k)\end{pmatrix}</math>と与えられる。 :領域<math>\left\{ {\scriptstyle\left(\begin{array}{c} x \\[-6pt] z \end{array}\right)} \big| x \leq k \right\}</math>を<math>y</math>軸に関して回転した回転体を平面<math>z=f(k)</math>で切った断面は半径<math>k</math>の閉円盤であり、疆界円周上の点を<math>\begin{pmatrix} x \\ y \\ f(k) \end{pmatrix}</math>とすると<math>k=\sqrt{x^2+y^2}</math>である。 :則ち回転体の疆界である回転面上の点<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は方程式<math>z=f(\sqrt{x^2+y^2})</math>を満たし、逆にこの方程式を満たす<math>\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>は回転面上にある。 纏めると以下のようになる。 {{定理|(回転面の方程式)}} <math>zx</math>平面上の曲線<math>z=f(x)\quad(x\geq0)</math>を<math>y</math>軸に関して回転させた回転面の方程式は :<math>z=f(\sqrt{x^2+y^2})</math> {{定理終わり}} <math>z</math>軸・<math>x</math>軸に関する回転面の方程式は変数を輪環の順に入れ替えることで得られる。 回転面に対し、元の曲線を'''母線'''という。 母線が直線である回転面は'''円錐'''である。 :<math>z=mx+n\quad(m\neq0,x\geq0)</math>とすれば<math>y</math>軸に関して回転した曲面の方程式は :<math>z=m\sqrt{x^2+y^2}+n</math> :<math>z-n = m\sqrt{x^2+y^2}</math> これを両辺二乗すると :<math>(z-n)^2=m^2x^2+m^2y^2</math> であり、錐面の方程式<math>\frac{z^2}{c^2}=\frac{x^2}{a^2}+\frac{y^2}{b^2}</math>を満たしていることがわかる。 回転軸が傾いている場合、<math>xyz</math>空間の回転行列<math>\mathbf{R}</math>を利用することで各軸に関する回転に帰着することもできるが、ここでは曲面のベクトル表示を扱ったのでベクトル方程式で回転を記述することを考えたい。 点<math>\mathrm{O}</math>から<math>\boldsymbol{r}</math>とそれに平行でない単位ベクトル<math>\boldsymbol{e}</math>が伸びており、そのなす角が<math>\theta</math>であるとする。<math>\boldsymbol{r}</math>の終点<math>\mathrm{P}</math>を含み<math>\boldsymbol{e}</math>を法線とする平面を<math>\Pi</math>、<math>\Pi</math>と直線<math>\{k\boldsymbol{e} \mid k>0\}</math>の交点を<math>\mathrm{N}</math>、<math>\mathrm{P}</math>を<math>\Pi</math>内で<math>\mathrm{N}</math>を中心として<math>\phi</math>回転した点を<math>\mathrm{Q}</math>、<math>\mathrm{NQ}</math>から<math>\mathrm{NP}</math>へ降ろした垂足を<math>\mathrm{R}</math>と置く。但し、回転角<math>\phi</math>の正の向きは<math>\boldsymbol{e}</math>を右螺子の進む向きとする方向に定める。 このとき、<math>\boldsymbol{r}</math>を<math>\boldsymbol{e}</math>に関して<math>\phi</math>だけ回転させたベクトル<math>\boldsymbol{r}'</math>は以下のように表される。 {{定理|(ロドリゲスの公式)}} :<math>\boldsymbol{r}'=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> {{定理終わり}} *証明 :<math>\boldsymbol{r}'=\overrightarrow{\mathrm{OQ}}=\overrightarrow{\mathrm{ON}}+\overrightarrow{\mathrm{NR}}+\overrightarrow{\mathrm{RQ}}</math> :<math>\overrightarrow{\mathrm{ON}}</math>は<math>\boldsymbol{r}</math>の<math>\boldsymbol{e}</math>への正射影ベクトルなので ::<math>\overrightarrow{\mathrm{ON}}=\frac{\boldsymbol{r}\cdot\boldsymbol{e}}{\boldsymbol{e}\cdot\boldsymbol{e}}\boldsymbol{e}=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}</math> :<math>\triangle\mathrm{NQR}</math>を考えると<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>と<math>\|\overrightarrow{\mathrm{NR}}\|=\|\overrightarrow{\mathrm{NQ}}\|\cos\phi</math>及び<math>\overrightarrow{\mathrm{NR}}/\!\!/\overrightarrow{\mathrm{NP}}</math>より ::<math>\overrightarrow{\mathrm{NR}}=\overrightarrow{\mathrm{NP}}\cos\phi=(\overrightarrow{\mathrm{OP}}-\overrightarrow{\mathrm{ON}})\cos\phi=\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi</math> :<math>\boldsymbol{r}\times\boldsymbol{e}</math>は外積の定義から<math>\overrightarrow{\mathrm{NP}}</math>を<math>\Pi</math>上で<math>-\phi</math>方向に<math>\frac{\pi}{2}</math>だけ回転させたベクトルになるので、 :<math>\boldsymbol{r}\times\boldsymbol{e}/\!\!/\overrightarrow{\mathrm{RQ}}</math>と<math>\|\overrightarrow{\mathrm{RQ}}\|=\|\overrightarrow{\mathrm{NQ}}\|\sin\phi</math>及び<math>\|\overrightarrow{\mathrm{NQ}}\|=\|\overrightarrow{\mathrm{NP}}\|</math>から ::<math>\overrightarrow{\mathrm{RQ}}=-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> :これらを足して ::<math>\boldsymbol{r}'=(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}+\{\boldsymbol{r}-(\boldsymbol{r}\cdot\boldsymbol{e})\boldsymbol{e}\}\cos\phi-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})(1-\cos\phi)\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math> ::<math>=\boldsymbol{r}\cos\phi+(\boldsymbol{r}\cdot\boldsymbol{e})\,\mathrm{versin}\,\phi\,\boldsymbol{e}-(\boldsymbol{r}\times\boldsymbol{e})\sin\phi</math>// この証明ではベクトルの平行移動を用いているのでアフィン空間を前提とするが、この式そのものはアフィン構造に依存してないので一般のベクトル空間で成り立つ。 また、回転後のベクトルは母線のパラメータ<math>t</math>に加えて回転角<math>\phi</math>もパラメータとして有するので、<math>\boldsymbol{r}'(t, \phi)</math>という二変数ベクトル関数となって曲面を表すことになる。則ち、「曲線を回転すれば曲面を得る」という直感は正しい。 ロドリゲスの公式の応用として、例えば円錐のベクトル方程式が<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\mathrm{const}.</math>であることが導ける。 :円錐頂点の位置ベクトルを<math>\boldsymbol{p}</math>、軸ベクトルを<math>\boldsymbol{a}</math>、<math>\boldsymbol{a}</math>と角度<math>\alpha</math>をなす単位ベクトルを<math>\boldsymbol{v}</math>とする。このとき直線<math>\{k\boldsymbol{v}\mid k>0\}</math>が円錐の母線であり、母線と交わる向きである軸の法線ベクトルを<math>\boldsymbol{b}</math>とおく。 :ロドリゲスの公式より<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}</math>の周りに<math>\theta</math>だけ回転させたベクトル<math>\boldsymbol{v}'</math>は ::<math>\boldsymbol{v}'=\boldsymbol{v}\cos\theta+(\boldsymbol{v}\cdot\boldsymbol{e}_a)\,\mathrm{versin}\,\theta\,\boldsymbol{e}_a-(\boldsymbol{v}\times\boldsymbol{e}_a)\sin\theta</math> :ここで<math>\boldsymbol{v}</math>を<math>\boldsymbol{a}, \boldsymbol{b}</math>方向に基底分解すると ::<math>\boldsymbol{v}=\cos\alpha\,\boldsymbol{e}_a+\sin\alpha\,\boldsymbol{e}_b</math> :なので、 ::<math>\boldsymbol{v}'=\cos\alpha\boldsymbol{e}_a+\sin\alpha\{\boldsymbol{e}_b\cos\theta+(\boldsymbol{e}_a\times\boldsymbol{e}_b)\sin\theta\}</math> :円錐上の点<math>\boldsymbol{r}</math>の位置ベクトルは頂点から母線方向に<math>\rho</math>だけ進むので ::<math>\boldsymbol{r}=\boldsymbol{p}+\rho\boldsymbol{v}'</math> :であり、 ::<math>\boldsymbol{r}-\boldsymbol{p}=\rho\boldsymbol{v}'</math> :ここで<math>\|\boldsymbol{v}'\|=\|\boldsymbol{v}\|=1</math>より ::<math>\rho=\|\boldsymbol{r}-\boldsymbol{p}\|</math> :このベクトルと軸ベクトルの内積をとると ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\boldsymbol{v}'\cdot\boldsymbol{a}</math> ::<math>=\rho\{\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})+\sin\alpha\cos\theta(\boldsymbol{e}_b\cdot\boldsymbol{a})+\sin\alpha\sin\theta(\boldsymbol{e}_a\times\boldsymbol{e}_b)\cdot\boldsymbol{a}\}</math> :<math>\boldsymbol{e}_b, \boldsymbol{e}_a\times\boldsymbol{e}_b</math>とも<math>\boldsymbol{a}</math>に直交するので後ろの二項は消えて ::<math>(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}=\rho\cos\alpha(\boldsymbol{e}_a\cdot\boldsymbol{a})=\|\boldsymbol{r}-\boldsymbol{p}\|\|\boldsymbol{a}\|\cos\alpha</math> :則ち ::<math>\frac{(\boldsymbol{r}-\boldsymbol{p})\cdot\boldsymbol{a}}{\|\boldsymbol{r}-\boldsymbol{p}\|}=\|\boldsymbol{a}\|\cos\alpha=\mathrm{const}.</math>// 円錐が先に与えられている場合は「<math>\boldsymbol{r}-\boldsymbol{p}</math>が母線の方向ベクトルなのは図より自明」とできるが、ここでは「母線が先に与えられて回転によって円錐が構成される」という立場を採ったのでロドリゲスの公式が効くのである。 ロドリゲスの公式で微小回転<math>d\phi</math>の場合を考える。 正弦関数・余弦関数の部分を1項目までテイラー展開して<math>\cos(d\phi)=1+O(d\phi^2), \sin(d\phi)= d\phi+O(d\phi^3)</math>なので<math>\mathrm{versin}(d\phi)=O(d\phi^2)</math>であり、 :<math>\boldsymbol{r}' = \boldsymbol{r}-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> ここで<math>d\boldsymbol{r}=\boldsymbol{r}'-\boldsymbol{r}</math>なので :<math>d\boldsymbol{r}=-(\boldsymbol{r}\times\boldsymbol{e})d\phi+O(d\phi^2)</math> 則ち、ベクトル関数の全微分は微小回転で近似される。 オーダー記法の項を無視して<math>\boldsymbol{\omega}=\frac{d\phi}{dt}\boldsymbol{e}</math>と置くと :<math>d\boldsymbol{r}=(d\phi\boldsymbol{e})\times\boldsymbol{r}</math> これの両辺を<math>dt</math>で割って :<math>\frac{d\boldsymbol{r}}{dt}=\boldsymbol{\omega}\times\boldsymbol{r}</math> これは剛体の速度公式である。 ロドリゲスの公式の一次変換表記を考える。 <math>\boldsymbol{r}=\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}, \boldsymbol{r}'=\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}, \boldsymbol{e}=\begin{pmatrix} a \\ b \\ c \end{pmatrix}</math>とすると、 :<math>\begin{pmatrix} r'_1 \\ r'_2 \\ r'_3 \end{pmatrix}=\cos\phi\begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}+(ar_1+br_2+cr_3)\mathrm{versin}\,\phi\begin{pmatrix} a \\ b \\ c \end{pmatrix} - \sin\phi \begin{pmatrix} cr_2-br_3 \\ ar_3-cr_1 \\ br_1-ar_2 \end{pmatrix}</math> :<math>=\begin{pmatrix} (\cos\phi + a^2\,\mathrm{versin}\,\phi) r_1 + (ab\,\mathrm{versin}\,\phi -c\sin\phi) r_2 + (ca\,\mathrm{versin}\,\phi + b\sin\phi) r_3 \\ (ab\,\mathrm{versin}\,\phi + c\sin\phi) r_1 + (\cos\phi + b^2\,\mathrm{versin}\,\phi) r_2 + (bc\,\mathrm{versin}\,\phi -a\sin\phi) r_3 \\ (ca\,\mathrm{versin}\,\phi - b\sin\phi) r_1 + (bc\,\mathrm{versin}\,\phi+ a\sin\phi) r_2 + (\cos\phi + c^2\,\mathrm{versin}\,\phi) r_3 \end{pmatrix}</math> :<math>=\begin{pmatrix} \cos\phi + a^2\,\mathrm{versin}\,\phi & ab\,\mathrm{versin}\,\phi -c\sin\phi & ca\,\mathrm{versin}\,\phi + b\sin\phi \\ ab\,\mathrm{versin}\,\phi + c\sin\phi & \cos\phi + b^2\,\mathrm{versin}\,\phi & bc\,\mathrm{versin}\,\phi -a\sin\phi \\ ca\,\mathrm{versin}\,\phi - b\sin\phi & bc\,\mathrm{versin}\,\phi+ a\sin\phi & \cos\phi + c^2\,\mathrm{versin}\,\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\mathrm{versin}\,\phi</math>を<math>1-\cos\phi</math>に戻して係数行列を<math>1, \cos\phi, \sin\phi</math>の項に分解してみると :<math>=\begin{pmatrix} a^2+(1-a^2)\cos\phi & ab-ab\cos\phi -c\sin\phi & ca-ca\cos\phi + b\sin\phi \\ ab-ab\cos\phi + c\sin\phi & b^2+(1-b^2)\cos\phi & bc-bc\cos\phi -a\sin\phi \\ ca-ca\cos\phi - b\sin\phi & bc-bc\cos\phi+ a\sin\phi & c^2+(1-c^2)\cos\phi \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left\{ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi\begin{pmatrix} 1-a^2 & -ab & -ca \\ -ab & 1-b^2 & -bc \\ -ca & -bc & 1-c^2 \end{pmatrix} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right\} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> :<math>=\left[ \begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} + \cos\phi \left\{ \begin{pmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{pmatrix}-\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix} \right\} +\sin\phi\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \right] \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}</math> ここで<math>\begin{pmatrix} a^2 & ab & ca \\ ab & b^2 & bc \\ ca & bc & c^2 \end{pmatrix}</math>は<math>\boldsymbol{e}</math>の第<math>i</math>成分と第<math>j</math>成分を掛けたものが<math>(i, j)</math>成分となる行列になっていることがわかる。これを<math>\boldsymbol{e}\otimes\boldsymbol{e}</math>と書くことにする。<math>\sin\phi</math>に係る行列を<math>\mathbf{N}</math>と置くと、 :<math>\boldsymbol{r}'=\{\boldsymbol{e}\otimes\boldsymbol{e}+\cos\phi(\mathbf{E}_3-\boldsymbol{e}\otimes\boldsymbol{e})+\sin\phi\mathbf{N}\}\boldsymbol{r}</math> という表示を得る。 更に、<math>\mathbf{N}^2=\begin{pmatrix} -b^2-c^2 & ab & ca \\ ab & -c^2-a^2 & bc \\ ca & bc & -a^2-b^2 \end{pmatrix}</math>と<math>\|\boldsymbol{e}\|=\sqrt{a^2+b^2+c^2}=1</math>より :<math>\boldsymbol{e}\otimes\boldsymbol{e}=\mathbf{N}^2+(a^2+b^2+c^2)\mathbf{E}_3=\mathbf{N}^2+\mathbf{E}_3</math> が成り立つので、最終的に :<math>\boldsymbol{r}'=(\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2)\boldsymbol{r}</math> と二次の行列多項式で表示される。 なお、<math>\otimes</math>は発展節で紹介する'''テンソル積'''を表している。 ここで、行列<math>\mathbf{N}</math>についてより具体的に考えてみる。 先ず、<math>{}^t\!\mathbf{N}=-\mathbf{N}</math>が成り立つので<math>\mathbf{N}</math>は反対称行列(歪対称行列・交代行列)である。 <math>\mathbf{N}\boldsymbol{r}</math>を計算すると :<math>\mathbf{N}\boldsymbol{r}=\begin{pmatrix} 0 & -c & b \\ c & 0 & -a \\ -b & a & 0 \end{pmatrix} \begin{pmatrix} r_1 \\ r_2 \\ r_3 \end{pmatrix}=\begin{pmatrix} br_3-cr_2 \\ cr_1-ar_3 \\ ar_2-br_1 \end{pmatrix}=\boldsymbol{e}\times\boldsymbol{r}</math> 則ち、<math>\mathbf{N}</math>は<math>\boldsymbol{e}</math>に関する外積(形式的には<math>\boldsymbol{e}\times</math>という左演算)を一次変換とみて表現行列に直したものである。 更に、成分計算により<math>\mathbf{N}^3=-\mathbf{N}</math>という性質が成り立つことも判る。外積を「ベクトルを90°回転させる演算」とみると、二回の演算によって180°回転するということなのでこの結果は妥当である。 ここで行列自然指数関数<math>\exp(\phi\mathbf{N})=\sum_{i=0}^\infty \frac{(\phi\mathbf{N})^i}{i!}</math>を考えてみると上の性質より三次以上の項は<math>\mathbf{N}^4=-\mathbf{N}^2, \mathbf{N}^5=\mathbf{N},\cdots</math>のように全て二次以下に帰着できる。<br> また、自然指数関数のテイラー展開は絶対収束級数なので各項は可換であり、<math>\mathbf{N}</math>の二次式として纏め直すと :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3 + (\phi-\frac{\phi^3}{3!}+\frac{\phi^5}{5!}-\frac{\phi^7}{7!}+\cdots) \mathbf{N}+(\frac{\phi^2}{2!}-\frac{\phi^4}{4!}+\frac{\phi^6}{6!}-\frac{\phi^8}{8!}+\cdots)\mathbf{N}^2</math> ここで一次・二次の係数はそれぞれ正弦関数・正矢関数のテイラー展開になっているので結局は :<math>\exp(\phi\mathbf{N})=\mathbf{E}_3+\sin\phi\mathbf{N}+\mathrm{versin}\,\phi\mathbf{N}^2</math> ここから、<math>\exp(\phi\mathbf{N})</math>は角度<math>\phi</math>に関する有限回転に対応することが判った。 このことは以下の考え方でも求まる。<br> <math>\mathbf{N}</math>の最小方程式は<math>\mathbf{N}^3+\mathbf{N}=\mathbf{O}_3</math>より<math>x(x^2+1)=0</math>であり固有値は<math>0, \pm{i}</math>と求まるので、<math>\exp(\phi\mathbf{N})</math>の対角化行列は :<math>\begin{pmatrix} e^{0\phi} & 0 & 0 \\ 0 & e^{i\phi} & 0 \\ 0 & 0 & e^{-i\phi} \end{pmatrix}</math> ここで任意の解析関数<math>f</math>について<math>f(\mathbf{N})</math>のテイラー展開は二次以下の多項式になるので :<math>\exp(\phi\mathbf{N})=\alpha\mathbf{E}_3+\beta\mathbf{N}+\gamma\mathbf{N}^2</math> これを実多項式に戻した<math>\alpha+\beta{x}+\gamma{x^2}</math>が<math>e^{\phi{x}}</math>と任意の固有値で一致すればよい(二次補間)ので、 :<math>\begin{cases} e^0 = \alpha \\ e^{i\phi} = i\beta -\gamma \\ e^{-i\phi} = -i\beta-\gamma \end{cases}</math> :<math>\iff \begin{cases} 1 = \alpha \\ \cos\phi+i\sin\phi = (\alpha -\gamma) + i\beta \end{cases}</math> :<math>\therefore \begin{cases} \alpha=1 \\ \beta=\sin\phi \\ \gamma=1-\cos\phi=\mathrm{versin}\,\phi \end{cases}</math> 則ち、<math>\mathbf{N}^3=-\mathbf{N}</math>という構造は<math>\Psi_\mathbf{N}(x)=x(x^2+1)</math>という最小多項式に起因するということである。 更に[[表現論]]の観点から見ると、三次直交行列全体である回転群<math>SO(3)</math>に対し、<math>\mathbf{N}</math>は<math>SO(3)</math>の単位元に於ける接空間(三次反対称行列全体・則ちリー代数<math>\mathfrak{so}(3)</math>)の元であり、<math>\exp(\phi\mathbf{N})</math>はリー群<math>SO(3)</math>の元である。ここで行列自然指数関数は「リー代数からリー群へ引き戻す写像」なので'''指数写像'''と呼ばれる。 これが[[#フレネ標搆]]で述べた「直交変換の一次近似が反対称変換」という事実のより正確な表現である。 補足だが、力学で扱う[[w:オイラー角]]というものを導入するとロドリゲスの公式を各座標軸に関する回転の合成で表すこともできる。 ===種々の曲率=== ここでは三次元空間内の正則曲面について考える。 曲面<math>S:\boldsymbol{r}=\boldsymbol{r}(t, u)</math>上で定義され弧長パラメータ表示された正則曲線<math>C:\boldsymbol{r}=\boldsymbol{r}(t(s), u(s))</math>を考える。 <math>C</math>の接ベクトルは合成関数微分公式より :<math>\boldsymbol{t}=\frac{d\boldsymbol{r}}{ds}=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}</math> と表示される。 ここで両辺の<math>ds</math>を形式的に払うと :<math>\boldsymbol{t}ds=\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> これの自分自身との内積をとると :<math>\|\boldsymbol{t}\|^2(ds)^2=\left\|\frac{d\boldsymbol{r}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right\|^2(du)^2</math> 弧長パラメトライズされた接ベクトルは単位ベクトルであり、右辺のベクトル演算の部分を第一基本量で置き換えると :<math>ds^2=E(dt)^2+2Fdtdu+G(du)^2</math> と、第一基本形式を別の方法で得られた。 <math>C</math>の主法線ベクトルは合成関数微分を繰り返し適用することで :<math>\boldsymbol{n}_C=\frac{d\boldsymbol{t}}{ds}=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{du}{ds}\right)</math> :<math>=\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d}{ds}\left(\frac{dt}{ds}\right)+\frac{d}{ds}\left(\frac{\partial{\boldsymbol{r}}}{\partial{u}}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d}{ds}\left(\frac{du}{ds}\right)</math> :<math>=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\frac{du}{ds}\right)\frac{dt}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\frac{du}{ds}\right)\frac{du}{ds}+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> :<math>=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\left(\frac{dt}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\frac{d^2t}{ds^2}+2\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\frac{dt}{ds}\frac{du}{ds}+\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\left(\frac{du}{ds}\right)^2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\frac{d^2u}{ds^2}</math> ここで、<math>S</math>の法線ベクトル<math>\boldsymbol{n}_S=\frac{\partial{\boldsymbol{r}}}{\partial{t}}\times\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>は一般に<math>\boldsymbol{n}_C</math>と一次従属とは限らない。 後の話を単純にするため<math>\boldsymbol{n}_S</math>を正規化したベクトルを<math>\boldsymbol{e}_S</math>と置いて<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S</math>を計算してみる。 :<math>\boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{t}}, \boldsymbol{e}_S\perp\frac{\partial{\boldsymbol{r}}}{\partial{u}}</math>より :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{dt}{ds}\right)^2+2\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S\right)\frac{dt}{ds}\frac{du}{ds}+\left(\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S\right)\left(\frac{du}{ds}\right)^2</math> ここで各内積<math>L=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S,\quad M=\frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S,\quad N=\frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S</math>を<math>S</math>の'''第二基本量'''と呼ぶ。 <math>\boldsymbol{n}_C, \boldsymbol{e}_S</math>のなす角を<math>\psi</math>とすると<math>C</math>の曲率を<math>\kappa_C</math>として :<math>\boldsymbol{n}_C\cdot\boldsymbol{e}_S=\kappa_C \cos\psi</math> なので<math>ds</math>に関して形式的に通分して :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> 右辺の分子<math>I\!I:=L(dt)^2+2Mdtdu+N(du)^2</math>を<math>S</math>の'''第二基本形式'''という。 <math>\begin{cases}\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\boldsymbol{e}_S=0 \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\boldsymbol{e}_S=0 \end{cases}</math>を<math>t</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{t}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{t}\partial{u}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=0 \end{cases}</math> また、<math>u</math>で偏微分すると :<math>\begin{cases} \frac{\partial^2{\boldsymbol{r}}}{\partial{u}\partial{t}}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \\ \frac{\partial^2{\boldsymbol{r}}}{\partial{u}^2}\cdot\boldsymbol{e}_S+\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}=0 \end{cases}</math> ここから第二基本量は :<math>L=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}},\quad M=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}=-\frac{\partial{\boldsymbol{r}}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad N=-\frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}</math> とも表示され、第二基本形式の別表示 :<math>I\!I=-\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> を得る。 これは更に全微分から微小ベクトル同士の内積として :<math>I\!I=-d\boldsymbol{r}\cdot{d}\boldsymbol{e}_S</math> とも書ける。 第一基本形式は曲面上の微小変位の自身との内積だったが、第二基本形式は曲面上の微小変位と法線方向の微小変位の内積である。則ち、第一基本形式は曲面の内在的な量、第二基本形式は曲面の外在的な量である。 第一基本形式と同様に第二基本形式は二次形式なので、<math>\boldsymbol{v}:=\begin{pmatrix} dt \\ du \end{pmatrix}, \mathbf{H}=\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>と置くと :<math>I\!I={}^t\!\boldsymbol{v}\mathbf{H}\boldsymbol{v}</math> と行列表示できる。この<math>\mathbf{H}</math>を'''第二基本行列'''という。 ここで、モンジュ表示された曲面<math>z=f(x, y)</math>に対して第二基本行列を考えてみる。 :<math>\boldsymbol{r}(t, u)=\begin{pmatrix} t \\ u \\ f(t, u)\end{pmatrix}</math>なので[[解析学基礎/多変数関数の微積分#全微分]]の結果を参照すると直ちに :<math>L=\frac{\frac{\partial^2{f}}{\partial{t}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad M=\frac{\frac{\partial^2{f}}{\partial{t}\partial{u}}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2},\quad N=\frac{\frac{\partial^2{f}}{\partial{u}^2}}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}</math> :が判るので、 :<math>\mathbf{H}=\frac{1}{\sqrt{1+\left(\frac{\partial{f}}{\partial{t}}\right)^2+\left(\frac{\partial{f}}{\partial{u}}\right)}^2}\begin{pmatrix} \frac{\partial^2{f}}{\partial{t}^2} & \frac{\partial^2{f}}{\partial{tu}} \\ \frac{\partial^2{f}}{\partial{tu}} & \frac{\partial^2{f}}{\partial{u^2}} \end{pmatrix}</math> これはヘッシアンを法線の長さで割った行列である。 則ち、任意の正則曲面に対して第二基本行列はヘッセ行列と同じ役割をすると考えられる。 実際、点<math>\mathrm{P}</math>の開近傍で<math>\det\mathbf{H}</math>が正である曲面は<math>\mathrm{P}</math>の開近傍で上下どちらかに凸であり、負である曲面は<math>\mathrm{P}</math>で鞍点となることが知られている。 このように第二基本形式は曲面の「曲がり方」を表す量と考えられるので、曲面に対する曲率も考えられる。 ここで第二基本形式を定義した式 :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{ds^2}</math> に立ち戻ると、右辺の分母は<math>s</math>に依存しない第一基本形式なので第一基本量を用いて :<math>\kappa_C\cos\psi=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math> 右辺を形式的に<math>dt^2</math>で割ると :<math>\kappa_C\cos\psi=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> この右辺は<math>\boldsymbol{n}_C</math>に依存しない量なので<math>\boldsymbol{n}_S, \boldsymbol{n}_C</math>のなす角度である<math>\psi</math>にも依存しない。 そこで、この値を曲面<math>S</math>の'''法曲率'''と定義する。 :<math>\varkappa:=\frac{L+2M\frac{du}{dt}+N\left(\frac{du}{dt}\right)^2}{E+2F\frac{du}{dt}+G\left(\frac{du}{dt}\right)^2}</math> 法曲率の幾何学的意味を考える。 <math>\varkappa=\kappa_C\cos\psi</math>より、<math>\cos\psi=1</math>のとき<math>S</math>の法曲率と<math>C</math>の曲率が一致する。このとき<math>\boldsymbol{n}_S /\!\!/ \boldsymbol{n}_C</math>であり、<math>C</math>は曲面上の点<math>\mathrm{P}</math>とそこでの曲面の法線<math>\boldsymbol{n}_S(\mathrm{P})</math>を含む平面で曲面を切断した切り口('''法切り口''')に対応する曲線('''法曲線''')である。 則ち、法曲率は法曲線の曲率に対応する。 なお、法曲線<math>C</math>は切断に用いる平面に拘束されるので接ベクトル<math>\boldsymbol{t}_C</math>も平面に拘束される。則ち、拘束平面は<math>\{\boldsymbol{t}_C, \boldsymbol{n}_C\}</math>の張る接触平面である。 法切り口を齎す平面は法線を軸にして回転することができ、その回転角によって法曲率の値が異なることになる。この回転は具体的にはロドリゲスの公式によって記述されるが、法曲率の極大値・極小値は<math>\varkappa</math>を<math>k=\frac{du}{dt}</math>の関数とみることで以下のように考えることができる。 :法曲率の定義式より ::<math>\varkappa(E+2Fk+Gk^2)=L+2Mk+Nk^2</math>・・・(*) :これが<math>k</math>の恒等式なので微分しても等号が成り立ち、 ::<math>\frac{d\varkappa}{dk}(E+2Fk+Gk^2)+\varkappa(2F+2Gk)=2M+2Nk</math> :フェルマーの定理より<math>\frac{d\varkappa}{dk}=0</math>を満たす<math>(k, \varkappa)</math>が極値点の候補なので ::<math>\varkappa(2F+2Gk)=2M+2Nk</math>・・・(@) :が成り立つ必要がある。 :これを<math>k</math>倍して(*)を引くと ::<math>\varkappa(E+Fk)=L+Mk</math>・・・(#) :これと(@)を連立して ::<math>k=-\frac{\varkappa{F}-M}{\varkappa{G}-N}</math> :これを(#)に代入して ::<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)=0</math>・・・($) :という二次方程式を得る。 :($)が相異なる二つの実根<math>\kappa_1, \kappa_2</math>を持てばそれらは極小値・極大値である。 :逆に、極小値・極大値を持てばフェルマーの定理より($)を満たす。// この<math>\kappa_1, \kappa_2</math>を<math>S</math>の'''主曲率'''という。 ($)の左辺を変形してみると、 :<math>(EG-F^2)\varkappa^2-(GL+EN-2FM)\varkappa+(LN-M^2)</math> :<math>=\{EG\varkappa^2-(GL+EN)\varkappa+LN\}-\{F^2\varkappa^2-2FM\varkappa+M^2\}</math> :<math>=(L-\varkappa{E})(N-\varkappa{G})-(M-\varkappa{F})^2</math> :<math>=\det\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}</math> :<math>=\det(\mathbf{H}-\varkappa\mathbf{K})</math> という、第一基本行列と第二基本行列を用いた形が出てきた。 ここで<math>\varkappa=\frac{L(dt)^2+2Mdtdu+N(du)^2}{E(dt)^2+2Fdtdu+G(du)^2}</math>を変形して :<math>(L-\varkappa{E})dt^2+2(M-\varkappa{F})dtdu+(N-\varkappa{G})du^2=0</math> これを二次形式表示すると :<math>\begin{pmatrix} dt & du \end{pmatrix}\begin{pmatrix} L-\varkappa E & M - \varkappa F \\ M - \varkappa F & N - \varkappa G \end{pmatrix}\begin{pmatrix} dt \\ du \end{pmatrix}=0</math> と、同じ<math>\mathbf{H}-\varkappa\mathbf{K}</math>がここでも登場する。 この行列は法曲率を持つ方向を二次形式で判定しているが、主曲率を持つ場合はラグランジュの未定乗数法より<math>(\mathbf{H}-\varkappa\mathbf{K})\begin{pmatrix} dt \\ du \end{pmatrix}=\boldsymbol{0}</math>が成り立ち、これが<math>\det(\mathbf{H}-\varkappa\mathbf{K})=0</math>という式の正体である。更に言うと、<math>\mathbf{H}\boldsymbol{x}=\varkappa\mathbf{K}\boldsymbol{x}</math>という一般化固有値問題の解が主曲率<math>\kappa_1, \kappa_2</math>に対応している。このときの一般化固有ベクトル<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>を主曲率に対する'''主方向'''という。 二つの主方向の関係を調べる。 :主方向の定義より ::<math>\begin{cases} (\mathbf{H}-\kappa_1\mathbf{K}) \boldsymbol{x}_1=\boldsymbol{0} \\ (\mathbf{H}-\kappa_2\mathbf{K}) \boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> :なので ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2(\mathbf{H}-\kappa_1\mathbf{K})\boldsymbol{x}_1=\boldsymbol{0} \\ {}^t\!\boldsymbol{x}_1(\mathbf{H}-\kappa_2\mathbf{K})\boldsymbol{x}_2=\boldsymbol{0} \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_1\mathbf{H}\boldsymbol{x}_2=\kappa_2{}^t\!\boldsymbol{x}_1 \mathbf{K}\boldsymbol{x}_2 \end{cases}</math> :第一基本行列・第二基本行列とも対称行列なので第二式の転置をとって ::<math>\begin{cases} {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_1{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1 \\ {}^t\!\boldsymbol{x}_2\mathbf{H}\boldsymbol{x}_1=\kappa_2{}^t\!\boldsymbol{x}_2 \mathbf{K}\boldsymbol{x}_1 \end{cases}</math> :上下の式の差をとって ::<math>(\kappa_1-\kappa_2){}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\boldsymbol{0}</math> :<math>\kappa_1=\kappa_2</math>のときは<math>\boldsymbol{x}_1, \boldsymbol{x}_2</math>に関する恒等式であるので、<math>\kappa_1\neq\kappa_2</math>のときを考える。 ::<math>{}^t\!\boldsymbol{x}_2\mathbf{K}\boldsymbol{x}_1=\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_2+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_2\right)\cdot\left(\frac{\partial{\boldsymbol{r}}}{\partial{t}}t_1+\frac{\partial{\boldsymbol{r}}}{\partial{u}}u_1\right)=0</math> :この二つのベクトルは主方向を向くので2つの主方向は直交する。 <math>\kappa_1=\kappa_2</math>(法曲率<math>\varkappa(t, u)=\mathrm{const}.</math>)の場合、<math>S</math>の接平面内の任意の方向が主方向となるので「どの方向にも一様な曲がり方をする」と考えられる。このような主曲率を与える点を'''臍点'''という。任意の点が臍点である曲面は球面である。 上の結果から、'''臍点でない各点で2つの主方向は直交する'''。 主曲率に対して解と係数の関係から得る値 :<math>H=\frac{\kappa_1+\kappa_2}{2}=\frac{GL+ENN-2FM}{2EG-F^2},\quad K=\kappa_1\kappa_2=\frac{LN-M^2}{EG-F^2}</math> をそれぞれ<math>S</math>の'''平均曲率'''・'''全曲率'''('''ガウス曲率''')という。 全曲率の式を見ると<math>K=\frac{LN-M^2}{EG-F^2}=\frac{\det\mathbf{H}}{\det\mathbf{K}}=\det(\mathbf{K}^{-1}\mathbf{H})</math>である。 そこで、<math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>と定義してみると行列式の性質より<math>K</math>は<math>\mathbf{S}</math>の固有値の積である。 ここで<math>\mathbf{S}</math>の固有方程式は :<math>\det(\mathbf{S}-\lambda\mathbf{E})=\det(\mathbf{K}^{-1}\mathbf{H}-\lambda\mathbf{E})=\det\mathbf{K}^{-1}\det(\mathbf{H}-\lambda\mathbf{K})=0</math> <math>\det\mathbf{K}^{-1}\neq0</math>より :<math>\det(\mathbf{H}-\lambda\mathbf{K})=0</math> これは主曲率を定義した二次方程式($)のことだったので、この方程式の解である固有値は<math>\lambda=\kappa_1, \kappa_2</math>である。 則ち、<math>K=\det\mathbf{S},\quad H=\frac{1}{2}\mathrm{tr}\,\mathbf{S}</math>が成り立つ。 更に、第一基本行列から第二基本行列への一次変換を考えると以下が成り立つことも判る。但し、こちらもフレネ=セレーと同様に厳密にはベクトルを列ではなく行に並べるのが正しいことに注意。 {{定理|(ヴァインガルテンの式)}} :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=-\mathbf{S}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> {{定理終わり}} *証明 :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>と置く。 :両辺に<math>{}^t\!\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math>を右から掛けると行列積であることに注意して :<math>\begin{pmatrix} \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}=\mathbf{A}\begin{pmatrix} \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{t}} & \frac{\partial\boldsymbol{r}}{\partial{t}}\cdot\frac{\partial\boldsymbol{r}}{\partial{u}} \\ \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}}\cdot\frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix}</math> :<math>\therefore -\mathbf{H}=\mathbf{A}\mathbf{K}</math> :<math>\therefore \mathbf{A}=-\mathbf{H}\mathbf{K}^{-1}=-\mathbf{K}^{-1}\mathbf{H}=-\mathbf{S}</math>// 臍点で行列<math>\mathbf{H}-\varkappa\mathbf{K}</math>を考えると<math>\varkappa=\kappa_1=\kappa_2</math>及び「主方向が任意」から :<math>\mathbf{H}-\varkappa\mathbf{K}=\mathbf{O}</math> であり、これを成分で書き下せばヴァインガルテンの式より法曲率に関して :<math>\begin{cases} \varkappa=\frac{L}{E}=\frac{M}{F}=\frac{N}{G} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{t}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{u}} = \varkappa \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{cases}</math> を得る。 <math>\mathbf{S}=\mathbf{K}^{-1}\mathbf{H}</math>に於いて<math>\mathbf{K}</math>は正定値対称行列なので正則対称な主平方根<math>\mathbf{K}^{1/2}</math>が存在して :<math>\mathbf{S}=\mathbf{K}^{-1/2}\mathbf{K}^{-1/2}\mathbf{H}</math> ここで<math>\mathbf{T}=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math>という相似変換で表された行列を考えてみると :<math>\mathbf{K}^{1/2}\mathbf{S}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{1/2}\mathbf{K}^{-1}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{K}^{-1/2}\mathbf{H}\mathbf{K}^{-1/2}</math> :<math>=\mathbf{T}</math> であり、<math>\mathbf{S}\sim\mathbf{T}</math>なのでこれらの2つの固有値の組は一致する。 :<math>\mathbf{H}={}^t\!\mathbf{H}</math> より :<math>{}^t\!\mathbf{T}=\mathbf{T}</math> が成り立つので、<math>\mathbf{T}</math>は対称行列であり2つの固有値は実数である。 よって<math>\mathbf{S}</math>の二つの固有値はともに実数であるが、この固有値は($)の解<math>\kappa_1, \kappa_2</math>のことだったので($)は虚根を持たず、'''主曲率は必ず実数'''である。 モンジュ表示された曲面では先程求めた第二基本量の表式から直ちに :<math>H=\frac{\left\{1+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}\frac{\partial^2{f}}{\partial{x}^2}+\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2\right\}\frac{\partial^2{f}}{\partial{y}^2}-2\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}\frac{\partial^2{f}}{\partial{x}\partial{y}}}{{2\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^\frac{3}{2}}},\quad K=\frac{\frac{\partial{f}}{\partial{x}}\frac{\partial{f}}{\partial{y}}-\left(\frac{\partial^2{f}}{\partial{x}\partial{y}}\right)^2}{\left\{1+\left(\frac{\partial{f}}{\partial{x}}\right)^2+\left(\frac{\partial{f}}{\partial{y}}\right)^2\right\}^2}</math> を得る。 等温座標系では<math>\mathbf{K}^{-1}=\frac{1}{\lambda^2}\mathbf{E}_3</math>より<math>\mathbf{S}=\frac{1}{\lambda^2}\begin{pmatrix} L & M \\ M & N \end{pmatrix}</math>なので、平均曲率・ガウス曲率はそれぞれ<math>H=\frac{L+N}{2\lambda^2},\quad K=\frac{LN-M^2}{\lambda^4}</math>と簡単に求まる。 ある点に於ける2つの主曲率はそれぞれその点に於ける極大方向・極小方向の曲がり方を与えるので、<math>\kappa_1, \kappa_2</math>の符号の組み合わせがその点近傍に於ける曲面の曲がり方を与えることになる。 具体的には、両方とも正なら上に凸、負なら下に凸、異符号なら鞍点となる。主曲率が0ならばその主方向に対して曲がっていないということである。 主曲率の積である全曲率の符号を見ても良い。全曲率が正ならば上下どちらかに凸、負ならば鞍点である。第一基本行列が正定値行列であることから主曲率の符号は第二基本行列の行列式と一致するので先程の「第二基本行列がヘッセ行列の一般化」という話に繫がる。 任意点で<math>H=0</math>を満たす曲面を'''極小曲面'''という。極小曲面は曲面を連続変形させたときに曲面積の最小値を与える曲面であることが知られている。 平面は自明な極小曲面である。他にも<math>z=\ln\left(\frac{\cos y}{\cos x}\right)(-\frac{\pi}{2}<x, y<\frac{\pi}{2})</math>(シェルクの第一曲面)などが知られている。 極小曲面は表面張力の理論に応用されている。 例えば石鹼膜のつくる曲面について、膜上点での表裏の圧力差<math>P</math>・その点での表面張力<math>T</math>及び平均曲率<math>H</math>に対し<math>P=2TH</math>が成立する(ヤング=ラプラスの公式)ことが知られているが、閉曲線である枠に張った膜が割れずに安定して存在する条件は全ての点で<math>P=H=0</math>、則ち極小曲面のときである。 曲面<math>S</math>上の微小変位<math>d\boldsymbol{r}</math>、法線方向の微小変位<math>d\boldsymbol{e}_S</math>に対して第一基本形式は<math>I=d\boldsymbol{r}\cdot d\boldsymbol{r}</math>、第二基本形式は<math>I\!I=-d\boldsymbol{r}\cdot d\boldsymbol{e}_S</math>であった。 最後の組み合わせである<math>d\boldsymbol{e}_S\cdot d\boldsymbol{e}_S</math>を<math>S</math>の'''第三基本形式'''と定義する。 :<math>I\!I\!I:=\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)\cdot\left(\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}dt+\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}du\right)</math> :<math>=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2(dt)^2+2\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}dtdu+\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2(du)^2</math> これを同様に二次形式の行列表示に直すと<math>\mathbf{W}:=\begin{pmatrix} \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2 & \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} \\ \frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}} & \left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2 \end{pmatrix}</math>として :<math>I\!I\!I={}^t\!\boldsymbol{v}\mathbf{W}\boldsymbol{v}</math> この<math>\mathbf{W}</math>を'''第三基本行列'''という。 見て判る通り、'''第三基本量'''は<math>P=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\right\|^2,\quad Q=\frac{\partial{\boldsymbol{e}_S}}{\partial{t}}\cdot\frac{\partial{\boldsymbol{e}_S}}{\partial{u}},\quad R=\left\|\frac{\partial{\boldsymbol{e}_S}}{\partial{u}}\right\|^2</math>である。 臍点でないとき2つの主方向は直交するので、臍点を持たない曲面に対して主方向を直交基底としたパラメータ表示<math>\boldsymbol{r}=\boldsymbol{r}(p, q)</math>を考えられる。 このとき、各基本形式は :<math>I=dp^2+dq^2</math> :<math>I\!I=\kappa_1dp^2+\kappa_2dq^2</math> :<math>I\!I\!I=\kappa^2_1dp^2+\kappa^2_2dq^2</math> と表示されることが知られている。 第三基本形式は第一基本形式と第二基本形式の線型結合で表示される。 :<math>I\!I\!I=2HI\!I-KI</math> このことはヴァインガルテンの式と平均曲率・全曲率の定義を用いて確かめられる。 これに関連し、第二基本量で定義された全曲率は第一基本量のみで表されることが知られている。つまり、曲率という外在的な量を第一基本形式という内在的な量のみで記述でき、言い換えると「曲面を考えるときに'''曲面の外側の空間を考える必要が無い'''」ということである。 この定理は発見者自身も驚愕したことから'''ガウスの驚異の定理'''と呼ばれている。詳しくは発展節で扱う。 なお、平均曲率を考えるときは外側の空間の情報が必要である。 ==直交曲線座標系== {{節stub}} ===円筒座標系=== 平面の座標系として直交座標の他に斜交座標、極座標(円座標)、重心座標などがあったように、空間の座標系も複数通り考えられる。 空間座標を3つの実数の組<math>(r, \theta, z)</math>で表した座標系を'''円筒座標系'''('''円柱座標系'''、cylindrical coordinate system)という。ただし、<math>r</math>は原点からの(符号付き)距離、<math>\theta</math>は基準面に於ける始線からの正の回転角、<math>z</math>は基準面からの高さである。 円筒座標系は、円座標系の<math>r\theta</math>平面に<math>z</math>軸方向の次元を加えた3次元空間の座標と考えられる。 そのため、円筒座標系と直交座標系の対応は以下のようになる。 :<math>\begin{cases} x=r\cos\theta \\ y=r\sin\theta \\ z=z \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2} \\ \theta = \arctan\frac{y}{x} \\ z=z \end{cases}</math> 但し、<math>r</math>は基準面の裏側では負とする。 直交座標の<math>z</math>軸を基に円筒座標系の座標軸を決定する。一般に座標軸は直線とは限らないので、「軸」ではなく「曲線」と呼ぶことにする('''座標線''')。なお、「曲線」という語は一般に「直線」を包含する。 :<math>r</math>曲線:<math>z</math>軸上の点を通り<math>z</math>軸に垂直な半直線。 :<math>\theta</math>曲線:<math>z</math>軸を法線とする平面内にあり、中心が<math>z</math>軸上にある円周。 :<math>z</math>曲線:<math>z</math>軸に平行な直線。 ここで、各曲線に沿った微小変化がどのように表されるか見ていく。 <math>\boldsymbol{f}: (r,\theta,z)\to(x,y,z)</math>とする。 <math>\boldsymbol{f}</math>全体の微小変化は全微分<math>d\boldsymbol{f}=\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}</math>で表される。 上で求めた関係式より :<math>\boldsymbol{f}\begin{pmatrix} r \\ \theta \\ z\end{pmatrix}=\begin{pmatrix} x \\ y \\ z \end{pmatrix} = \begin{pmatrix} r\cos\theta \\ r\sin\theta \\ z \end{pmatrix}</math> なので、 :<math>\frac{\partial{(x,y,z)}}{\partial{(r,\theta,z)}} = \begin{pmatrix} \frac{\partial}{\partial{r}}r\cos\theta & \frac{\partial}{\partial{\theta}}r\cos\theta & \frac{\partial}{\partial{z}}r\cos\theta \\ \frac{\partial}{\partial{r}}r\sin\theta & \frac{\partial}{\partial{\theta}}r\sin\theta & \frac{\partial}{\partial{z}}r\sin\theta \\ \frac{\partial}{\partial{r}}z & \frac{\partial}{\partial{\theta}}z & \frac{\partial}{\partial{z}}z \end{pmatrix} = \begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> よって :<math>d\boldsymbol{f}=\begin{pmatrix} \cos\theta & -r\sin\theta & 0 \\ \sin\theta & r\cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} dr \\ d\theta \\ dz \end{pmatrix}=\begin{pmatrix} \cos\theta \\ \sin \theta \\ 0 \end{pmatrix}dr + \begin{pmatrix} -\sin\theta \\ \cos\theta \\ 0 \end{pmatrix}rd\theta + \begin{pmatrix} 0 \\ 0 \\ 1 \end{pmatrix}dz </math> 再右辺の各項を<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>と書くことにすると、<math>|d\vec{r}|, |d\vec{\theta}|, |d\vec{z}|</math>はそれぞれ<math>dr, rd\theta, dz</math>とわかる。<math>r, \theta, z</math>を物理量として捉えたとき<math>d\theta</math>の単位はラジアン(無次元量)であり、<math>rd\theta</math>の単位はメートル(長さの次元1)なので、次元の整合性が取れる。 纏めると以下のようになる。 {| class="wikitable" | ||style="text-align:center;"| <math>\boldsymbol{e}_x</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_y</math>成分 ||style="text-align:center;"| <math>\boldsymbol{e}_z</math>成分 ||style="text-align:center;"| ノルム |- |style="text-align:center;"| <math>d\vec{r}</math> ||style="text-align:center;"| <math>\cos\theta dr</math> ||style="text-align:center;"| <math>\sin\theta dr</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>dr</math> |- |style="text-align:center;"| <math>d\vec{\theta}</math> ||style="text-align:center;"| <math>-r\sin\theta d\theta</math> ||style="text-align:center;"| <math>r\cos\theta d\theta</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>rd\theta</math> |- |style="text-align:center;"| <math>d\vec{z}</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>0</math> ||style="text-align:center;"| <math>1</math> ||style="text-align:center;"| <math>dz</math> |} ここで<math>d\vec{r}, d\vec{\theta}, d\vec{z}</math>は内積を取ればどの組も互いに直交することが容易にわかるので、この3つのベクトルは3次元ユークリッド空間の直交基底である。 そこで、それぞれのベクトルを正規化することで各軸曲線方向の基本ベクトルを得る。 :<math>\boldsymbol{e}_r = \frac{d\vec{r}}{dr} = \cos\theta \boldsymbol{e}_x + \sin\theta \boldsymbol{e}_y</math> :<math>\boldsymbol{e}_\theta = \frac{d\vec{\theta}}{rd\theta} = -\sin\theta\boldsymbol{e}_x+\cos\theta\boldsymbol{e}_y</math> :<math>\boldsymbol{e}_z=\frac{d\vec{z}}{dz}=\boldsymbol{e}_z</math> これを一次変換の形式で表すと :<math>\begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix}</math> となる。 このときの表現行列を、座標系または基底ベクトルを変換することから'''座標変換行列'''又は'''基底変換行列'''という。場合によっては'''変換テンソル'''とも呼ぶ。 なお、この直交座標⇒円筒座標の座標変換行列は、<math>xyz</math>空間に於ける<math>z</math>軸まわりの回転行列に等しい。 逆基底変換はこの座標変換行列の逆行列を求めれば定式化できる。 回転行列は直交行列なので :<math>\begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} ^{-1}= {}^t \! \begin{pmatrix} \cos\theta & \sin\theta & 0 \\ -\sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} </math> であり、 :<math>\begin{pmatrix} \boldsymbol{e}_x \\ \boldsymbol{e}_y \\ \boldsymbol{e}_z \end{pmatrix} = \begin{pmatrix} \cos\theta & -\sin\theta & 0 \\ \sin\theta & \cos\theta & 0 \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} \boldsymbol{e}_r \\ \boldsymbol{e}_\theta \\ \boldsymbol{e}_z \end{pmatrix}</math> 円筒座標系は、[[電磁気学]]の解析でよく使用される。 例えば、高校物理の公式<math>B(r)=\frac{\mu_0I}{\tau r}</math>は、円筒座標系を知っていれば「電流が<math>z</math>軸に平行であることから磁場は<math>z</math>方向に一葉且つ<math>\theta</math>方向に回転対称なので、<math>r</math>方向の項のみが寄与する」と理解される。 ===極座標系=== 高等学校までの地理で習ったように、球面上の位置は緯度<math>\theta</math>と経度<math>\phi</math>で定めることができる。 一般に三次元空間で球面上のある点の座標を定めるには、更に球の中心からの距離<math>r</math>が必要である。 このようにして定められる座標系を'''三次元極座標系'''(polar coordinate system in 3D)または'''球(面)座標系'''(spherical coordinate system)という。 xyz座標空間の点<math>\mathrm{P}(x, y, z)</math>の極座標表示を考える。 <math>r=|\overrightarrow{\mathrm{OP}}|=\sqrt{x^2+y^2+z^2}</math>は容易にわかる。 <math>\theta</math>は<math>z</math>軸からの'''天頂角'''(zenith angle)であり、<math>\overrightarrow{\mathrm{OP}}</math>の<math>z</math>軸への正射影ベクトルを<math>\overrightarrow{\mathrm{OH}}=\vec{h}</math>とすると<math>\tan\theta = \frac{|\vec{h}|}{z}</math>が成り立つ。<math>|\vec{h}|=\sqrt{x^2+y^2}</math>より、<math>\theta=\arctan \frac{\sqrt{x^2+y^2}}{z}</math>である。 <math>\phi</math>は<math>x</math>軸からの'''方位角'''(azimuth angle)であり、<math>\mathrm{P}</math>から<math>xy</math>平面に降ろした垂足<math>\mathrm{Q}</math>を考えると<math>\tan\phi=\frac{y}{x}</math>とわかる。よって、<math>\phi=\arctan\frac{y}{x}</math>である。 逆に、これを<math>\mathrm{P}(x, y, z)</math>に復元することを考える。 <math>\triangle\mathrm{OHP}</math>について<math>\angle\mathrm{HOP}=\theta</math>なので、<math>z=\overline{\mathrm{OH}}=r\cos\theta</math>。 また、<math>\triangle\mathrm{OPQ}</math>について<math>\angle\mathrm{OPQ}=\theta</math>なので、<math>\overline{\mathrm{OQ}}=r\sin\theta</math>。 よって<math>x=\overline{\mathrm{OQ}}\cos\phi=r\sin\theta\cos\phi, y=\overline{\mathrm{OQ}}\sin\phi=r\sin\theta\sin\phi</math>。 以上を纏めると、直交座標と球面座標の対応関係は :<math>\begin{cases} x=r\sin\theta\cos\phi \\ y=r\sin\theta\sin\phi \\ z=r\cos\theta \end{cases} \iff \begin{cases} r=\sqrt{x^2+y^2+z^2} \\ \theta=\arctan\frac{\sqrt{x^2+y^2}}{z} \\ \phi=\arctan\frac{y}{x} \end{cases}</math> 一般に緯度は<math>-90^\circ \leqq \theta \leqq 90^\circ</math>、経度は<math>-180^\circ \leqq \phi \leqq 180^\circ</math>の範囲で表される(但し、符号の違いは東⇔西、南⇔北の違いである)。同様に、球面座標の天頂角<math>\theta</math>、方位角<math>\phi</math>は<math>\theta \in [-\frac{\pi}{4}, \frac{\tau}{4}], \phi \in [-\frac{\tau}{2}, \frac{\tau}{2}]</math>で考える。赤道面より下側(すなわち南半球)では<math>\theta<0</math>とする。 直交座標の<math>z</math>軸を基に極座標系の座標線を決定する。 :<math>r</math>曲線:原点を通る半直線。 :<math>\theta</math>曲線:原点中心で<math>z</math>軸上の一点から出る半円弧。 :<math>\phi</math>曲線:<math>z</math>軸を法線とする平面内で<math>z</math>軸上に中心を持つ円周。 各曲線に沿った微小変化は円柱座標系の場合と同様、ベクトル場の全微分を用いて :<math>\begin{cases} d\vec{r}= \begin{pmatrix} \sin\theta\cos\phi \\ \sin\theta\sin\phi \\ \cos\theta \end{pmatrix} dr \\ d\vec{\theta}= \begin{pmatrix} \cos\theta\cos\phi \\ \cos\theta\sin\phi \\ -\sin\theta \end{pmatrix}rd\theta \\ d\vec{\phi} = \begin{pmatrix} -\sin\phi \\ \cos\phi \\ 0 \end{pmatrix} r\sin\theta d\phi \end{cases}</math> と求まる。 これらは(内積の結果から)互いに直交するので、円柱座標の場合と同様の議論により :<math>\begin{pmatrix} \sin\theta\cos\phi & \sin\theta\sin\phi & \cos\theta \\ \cos\theta\cos\phi & \cos\theta\sin\phi & -\sin\theta \\ -\sin\phi & \cos\phi & 0 \end{pmatrix}</math> と変換テンソルが求まる。 これも直交行列であるので、逆変換テンソルは :<math>\begin{pmatrix} \sin\theta\cos\phi & \cos\theta\cos\phi & \cos\phi \\ \sin\theta\sin\phi & \cos\theta\sin\phi & -\sin\phi \\ -\sin\theta & \cos\theta & 0 \end{pmatrix}</math> と求まる。 球面座標系は、[[古典力学]]の解析でよく使用される。 例えば、赤道平面における角運動量保存則は<math>mr^2\frac{d\phi}{dt}=\mathrm{const}.</math>と表示されるが、これは<math>z</math>軸方向の角運動量を球面座標系の演算により取り出したものである。 球面座標系は特に機械制御に応用されている。 円柱座標系・球面座標系ともに各基底ベクトルが互いに直交しているので、そのことを明示して(且つ通常の直交座標系と区別して)'''直交曲線座標系'''(orthogonal curvilinear coordinate system)と呼ぶ場合がある。以下で扱う座標系たちも直交曲線座標系である。 ===円環座標系=== ===双極座標系=== ===回転放物面座標系=== ===放物柱座標系=== ===回転楕円面座標系=== ===楕円柱座標系=== ===楕円体座標系=== ==空間微分== ここでは三次元ユークリッド空間で考える。 ===勾配=== スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\varphi\in C^1</math>のとき、 :<math>\mathrm{grad}\,\varphi := \begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}</math> を<math>\varphi</math>の'''勾配'''(gradient)と定義する。 勾配の結果として得るベクトルを<math>\varphi</math>の'''勾配ベクトル'''ともいう。 勾配で定義される概念としては、電場が有名である。 :電位<math>\phi</math>に対する電場<math>\boldsymbol{E}</math>は :<math>\boldsymbol{E}:=-\mathrm{grad}\,\phi</math> 勾配はベクトル量であるため、そのことを明示するため新たな演算子を導入する。 '''空間偏微分演算子'''(ハミルトン演算子)を <math>\nabla:=\begin{pmatrix} \frac{\partial}{\partial{x}} \\ \frac{\partial}{\partial{y}} \\ \frac{\partial}{\partial{z}} \end{pmatrix}</math> と定義する。 この演算子自体は偏微分作用素の対象を後接しないと意味を成さない。しかし、便宜的にベクトル量と考えてベクトルと同様の演算則が成り立つと見做す。そのため、この演算子に関する演算は[[w:記号の濫用]](symbol abuse)であることを註しておく。 <math>\nabla</math>の正式な読み方は'''ナブラ'''(nabla)であるが、<math>\Delta</math>(delta)を反転した形であることから'''エイトレッド'''(atled)とも読まれる。なお、ナブラの由来は「竪琴」を意味する古代ギリシャ語「νάβλα」である。 この演算子を用いれば勾配の表式は :<math>\mathrm{grad}\,\varphi=\nabla\varphi</math> となる。 <math>\varphi</math>はスカラー場なのでスカラー量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その積<math>\nabla\varphi</math>はベクトル量のスカラー倍、すなわちベクトル量であることが見て取れる。 勾配はスカラー場に対する偏微分の結果を並べたベクトルであるため、偏微分の性質とベクトルの性質を組み合わせて以下が成り立つと判る。 #<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math>(線型性) #<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>(積の微分・ライプニッツ則) #<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math>(商の微分) #<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math>(合成関数微分) 任意点に対して勾配ベクトルが非零であるスカラー場を'''正則'''なスカラー場という。 以下、正則なスカラー場に限って扱う。 等位面<math>\varphi(x, y, z)=k(\mathrm{const}.)</math>上の点<math>\mathrm{P}(x_0, y_0, z_0)</math>を考える。 :<math>\mathrm{P}</math>を通り等位面に拘束される曲線のベクトル表示を<math>\boldsymbol{r}=\boldsymbol{r}(t)</math>とする。 :等位面の方程式を<math>t</math>で両辺微分して ::<math>\frac{\partial{\varphi}}{\partial{x}}\frac{dx}{dt}+\frac{\partial{\varphi}}{\partial{y}}\frac{dy}{dt}+\frac{\partial{\varphi}}{\partial{z}}\frac{dz}{dt}=0</math> :<math>t=t_0</math>のとき ::<math>\frac{\partial{\varphi}}{\partial{x}}x'(t_0)+\frac{\partial{\varphi}}{\partial{y}}y'(t_0)+\frac{\partial{\varphi}}{\partial{z}}z'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\cdot\boldsymbol{r}'(t_0)=0</math> ::<math>\nabla\varphi(\mathrm{P})\perp\boldsymbol{r}'(t_0)</math> ここで<math>\mathrm{P}</math>に於ける等位面の接平面は接ベクトル<math>\boldsymbol{r}'(t_0)</math>を含むため、<math>\nabla\varphi(\mathrm{P})</math>は点<math>\mathrm{P}</math>に於ける等位面の法線ベクトルである。 よって等位面の接平面の方程式は :<math>\nabla\varphi(\mathrm{P})\cdot(\boldsymbol{x}-\overrightarrow{\mathrm{OP}})=0</math> である。 スカラー場<math>\varphi=\varphi(\boldsymbol{x})</math>の全微分は :<math>d\varphi=\frac{\partial{\varphi}}{\partial{x}}dx+\frac{\partial{\varphi}}{\partial{y}}dy+\frac{\partial{\varphi}}{\partial{z}}dz</math> これをベクトルの内積とみると :<math>=\begin{pmatrix} \frac{\partial{\varphi}}{\partial{x}} \\ \frac{\partial{\varphi}}{\partial{y}} \\ \frac{\partial{\varphi}}{\partial{z}} \end{pmatrix}\cdot\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> :<math>=\nabla\varphi\cdot d\boldsymbol{x}</math> ここで変位ベクトル<math>d\boldsymbol{x}</math>を任意の方向を向いた単位ベクトル<math>\boldsymbol{e}</math>に拡張することを考えたい。 <math>\varphi(\mathrm{P})</math>に対して<math>\mathrm{P}</math>を始点とする<math>\boldsymbol{e}</math>方向の直線を考え、その上の点を<math>\mathrm{Q}</math>とする。 このとき、ベクトル変数<math>\boldsymbol{e}</math>による微分係数 :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{\mathrm{Q\to P}}\frac{\varphi(\mathrm{Q})-\varphi(\mathrm{P})}{\overline{\mathrm{QP}}}</math> を、<math>\varphi</math>の<math>\mathrm{P}</math>に於ける<math>\boldsymbol{e}</math>方向の'''方向微分係数'''と定義する。 方向微分係数はスカラー場に対し<math>\boldsymbol{e}</math>方向の変化率を与えるものと考えられる。そこで、方向微分係数が最大となる方向を考える。 :<math>\overrightarrow{\mathrm{PQ}}=t\boldsymbol{e}</math>と置く。 ::<math>\overrightarrow{\mathrm{OQ}}=\begin{pmatrix} x_0+te_1 \\ y_0+te_2 \\ z_0+te_3 \end{pmatrix}</math> ::<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\lim_{t\to0}\frac{\varphi(x_0+te_1, y_0+te_2, z_0+te_3)-\varphi(x_0, y_0, z_0)}{t}</math> :ここで<math>\Phi(t):=\varphi(x_0+te_1, y_0+te_2, z_0+te_3)</math>とすれば ::<math>=\lim_{t\to0}\frac{\Phi(t)-\Phi(0)}{t}</math> ::<math>=\frac{d\Phi(t)}{dt}</math> ::<math>=\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{x}}\frac{d(x_0+te_1)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{y}}\frac{d(y_0+te_2)}{dt}+\frac{\partial{\varphi}(x_0, y_0, z_0)}{\partial{z}}\frac{d(z_0+te_3)}{dt}</math> ::<math>=\frac{\partial{\varphi}(\mathrm{P})}{\partial{x}}e_1+\frac{\partial{\varphi}(\mathrm{P})}{\partial{y}}e_2+\frac{\partial{\varphi}(\mathrm{P})}{\partial{z}}e_3</math> ::<math>=\nabla\varphi(\mathrm{P})\cdot\boldsymbol{e}</math> よって、全微分の式の<math>d\boldsymbol{x}</math>をそのまま<math>\boldsymbol{e}</math>に取り替えたものが方向微分係数の表式である。 内積を書き下すと<math>\|\boldsymbol{e}\|=1</math>より :<math>\frac{\partial{\varphi}(\mathrm{P})}{\partial{\boldsymbol{e}}}=\|\nabla\varphi(\mathrm{P})\|\cos\theta</math> よって最大値をとるのは<math>\cos\theta=1</math>則ち'''<math>\boldsymbol{e}</math>が勾配方向のとき'''である。また、方向微分係数の最大値は'''勾配のノルム'''である。 このように、勾配はスカラー場の各点に於ける傾きを表す。これは最右辺の式が「各軸方向の傾きを表すベクトルの和」になっていることからも直観的にわかる。ここから、「gradient」の和訳として「勾配」が充当されたのは妥当である。 方向微分係数を'''方向導関数'''に拡張することを考える。 形式的には方向微分係数の定点<math>\mathrm{P}</math>を変数<math>\boldsymbol{x}</math>に置き換えればいいだけである。 :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\nabla\varphi(\boldsymbol{x})\cdot\boldsymbol{e}</math> 正式には極限を用いて :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{\boldsymbol{e}}}:=\lim_{t\to0}\frac{\varphi(\boldsymbol{x}+t\boldsymbol{e})-\varphi(\boldsymbol{x})}{t}</math> と定義する。 内積を書き下すと :<math>\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{x}}e_1+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{y}}e_2+\frac{\partial{\varphi}(\boldsymbol{x})}{\partial{z}}e_3</math> これを[[解析学基礎/多変数関数の微積分#極値]]で扱った方向偏微分作用素として書き直すと :<math>\left(e_1\frac{\partial}{\partial{x}}+e_2\frac{\partial}{\partial{y}}+e_3\frac{\partial}{\partial{z}}\right)\varphi(\boldsymbol{x})</math> :<math>=(\boldsymbol{e}\cdot\nabla)\varphi(\boldsymbol{x})</math> となる。 則ち、形式的には空間偏微分演算子の微分方向ベクトルとの右内積が方向偏微分作用素である。 更に、多変数関数のテイラー二次近似は :<math>f(\boldsymbol{x})\fallingdotseq f(\boldsymbol{a})+\nabla{f}(\boldsymbol{a})\cdot(\boldsymbol{x}-\boldsymbol{a})+\frac{1}{2}{}^t\!(\boldsymbol{x}-\boldsymbol{a})\mathbf{D}(\boldsymbol{x}-\boldsymbol{a})</math> と書けることが判る。但し、<math>\mathbf{D}</math>はヘッセ行列である。 多変数解析で扱った停留点(臨界点)は<math>\nabla\varphi(\mathrm{P})=\boldsymbol{0}</math>なる点<math>\mathrm{P}</math>として正式に定義される。また、ラグランジュの未定乗数法に於ける連立方程式も勾配を用いれば<math>\nabla\varphi(\mathrm{P})=\lambda\nabla\psi(\mathrm{P})</math>と書き表される。 スカラー場の全微分は勾配で表せたが、同様にベクトル場の全微分をナブラを用いて表すことを考える。 ベクトル場の全微分は :<math>d\boldsymbol{a}=\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}} d\boldsymbol{x}</math> で定義された。 ここで<math>n</math>次行列 <math>\mathbf{A}</math>と<math>n</math>項列ベクトル <math>\boldsymbol{a}</math>に対し、<math>(\mathbf{A} \circledast \boldsymbol{a})_{ij} = (\mathbf{A}_{ij}) a_i</math>となるような可換二項演算子 <math>\circledast</math>を定義する。これは本項独自の記法である。但し、<math>(\mathbf{P})_{ij}</math>は行列 <math>\mathbf{P}</math>の第ij成分を表す。 この記法を用いると、ヤコビ行列<math>\frac{\partial{(a_x,a_y,a_z)}}{\partial{(x,y,z)}}</math>は<math>\nabla \circledast \boldsymbol{a}</math>と表すことができる。 則ち、ベクトル場の全微分は :<math>d\boldsymbol{a} = (\nabla \circledast \boldsymbol{a}) d\boldsymbol{x}</math> と表される。 これを形式的に :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}=\nabla \circledast \boldsymbol{a}</math> と書き表すことができる。 則ち、ヤコビ行列はベクトル場のベクトル変数による導関数と見做せる。 ヤコビ行列はベクトル場の成分スカラー場に対する勾配ベクトルを行に並べたものという解釈もできるので、この考え方は自然である。 ここでベクトル場に対してスカラー場と同様に方向微分係数・方向導関数を考えると、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{x}}}\boldsymbol{v}</math> が成り立つことが判る。 これもベクトル場の成分スカラー場に対する方向微分係数・方向導関数を列に並べたベクトルと解釈できる。 則ち、 :<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> である。 ===発散=== ベクトル場<math>\boldsymbol{a}=\boldsymbol{a}(\boldsymbol{x})</math>が<math>x, y, z</math>の三変数関数であって<math>\boldsymbol{a}\in C^1</math>のとき、 :<math>\mathrm{div}\,\boldsymbol{a} := \frac{\partial{a_x}}{\partial{x}} + \frac{\partial{a_y}}{\partial{y}} + \frac{\partial{a_z}}{\partial{z}}</math> を<math>\boldsymbol{a}</math>の'''発散'''(divergence)と定義する。 発散が用いられる概念としては、'''ガウスの法則'''が有名である。 :電荷密度<math>\rho</math>、電場<math>\boldsymbol{E}</math>、真空の誘電率<math>\varepsilon_0</math>として :<math>\mathrm{div}\,\boldsymbol{E}=\frac{\rho}{\varepsilon_0}</math> 球面座標で考えることにより、この式の重要な性質「荷電粒子の座標を原点にとると原点以外では <math>\mathrm{div}\,\boldsymbol{E}=0</math>」を証明することができる。 勾配と同様に発散をナブラで表すことを考えると、 :<math>\mathrm{div}\,\boldsymbol{a}=\nabla\cdot\boldsymbol{a}</math> という表式を得る。 <math>\boldsymbol{a}</math>はベクトル場なのでベクトル量であり、<math>\nabla</math>は便宜的にベクトル量と考えることから、その内積<math>\nabla\cdot\boldsymbol{a}</math>はスカラー量であることが見て取れる。 発散に対しては以下が成り立つ。 #<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math>(線型性) #<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は内積の線型性より、後者は成分演算と勾配の定義より示される。 ヤコビ行列<math>\nabla\circledast\boldsymbol{a}</math>との関係を考える。 :<math>\nabla\circledast\boldsymbol{a}=\begin{pmatrix} \frac{\partial{\boldsymbol{a}}}{\partial{x}} & \frac{\partial{\boldsymbol{a}}}{\partial{y}} & \frac{\partial{\boldsymbol{a}}}{\partial{z}} \end{pmatrix}=\begin{pmatrix} \frac{\partial{a}_x}{\partial{x}} & \frac{\partial{a}_x}{\partial{y}} & \frac{\partial{a}_x}{\partial{z}} \\ \frac{\partial{a}_y}{\partial{x}} & \frac{\partial{a}_y}{\partial{y}} & \frac{\partial{a}_y}{\partial{z}} \\ \frac{\partial{a}_z}{\partial{x}} & \frac{\partial{a}_z}{\partial{y}} & \frac{\partial{a}_z}{\partial{z}} \end{pmatrix}</math> ここで跡が発散そのものになっているので :<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> が成り立つ。 発散の物理的意味を考える。 :密度<math>\rho</math>が一定である流体の速度場<math>\boldsymbol{v}\in\mathbb{R}^3</math>に対し、微小直方体に出入りする流体の質量収支を考える。 :点<math>(x,y,z)</math>に於ける流速<math>\boldsymbol{v}(x,y,z)=(v_x,v_y,v_z)</math>、直方体の各辺の長さを<math>\delta x, \delta y, \delta z</math>とする。 :単位時間あたりに<math>yz</math>平面に平行な面を通過する流体の質量収支は流出量<math>-\rho v_x(x,y,z)\delta y\delta z</math>、流入量<math>\rho v_x(x+\delta x,y,z)\delta y\delta z</math>より ::<math>\rho(v_x(x+\delta x,y,z)-v_x(x,y,z))\delta y\delta z=\rho\frac{v_x(x+\delta x,y,z)-v_x(x,y,z)}{\delta x}\delta x\delta y\delta z</math> :<math>\delta x\to0</math>の極限で ::<math>=\rho\frac{\partial{v_x}}{\partial{x}}dxdydz</math> :他の面で考えると対称性から輪環の順に入れ替えた結果を得るので直方体全体では ::<math>\rho\left(\frac{\partial{v_x}}{\partial{x}}+\frac{\partial{v_y}}{\partial{y}}+\frac{\partial{v_z}}{\partial{z}}\right)dxdydz</math> :よって単位体積当たりでは ::<math>\rho\nabla\cdot\boldsymbol{v}</math> :を得る。 ここで質量を密度で割ると体積なので、<math>\nabla\cdot\boldsymbol{v}</math>は単位時間あたりの流体の体積の正味の流出率を表す。 この微小直方体の単位体積あたりで観測すると、発散が正であれば流体は膨脹して密度が下がり、負であれば圧縮されて密度が上がる。0であれば流体は膨脹も圧縮もしない。 発散が零であるベクトル場を'''非圧縮/湧出無し/管状/ソレノイダル ベクトル場'''(incompressible/solenoidal vector field)などと呼ぶ。 また、ベクトル場の発散を'''湧き出し'''(「沸き出し」とも書く)と呼ぶ場合もある。 ベクトル場の流線に沿う流れが流体の体積を保存する条件はベクトル場が非圧縮であることである。これを'''リウヴィルの定理'''という。これは多くの場合、[[解析力学]]のハミルトン形式で表示される。 位置ベクトル場<math>\boldsymbol{r}=\begin{pmatrix} x \\ y \\ z \end{pmatrix}</math>に対して<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}</math>を考える。 :<math>\frac{\partial}{\partial{x}}\frac{1}{\|\boldsymbol{r}\|^n}=\frac{\partial{\left(\frac{1}{\|\boldsymbol{r}\|^n}\right)}}{\partial{\|\boldsymbol{r}\|}}\frac{\partial{\|\boldsymbol{r}\|}}{\partial{x}}=-\frac{n}{\|\boldsymbol{r}\|^n+1}\frac{x}{\sqrt{x^2+y^2+z^2}}=-\frac{nx}{\|\boldsymbol{r}\|^{n+2}}</math> <math>y, z</math>も同様なので :<math>\nabla\frac{1}{\|\boldsymbol{r}\|^n}=-\frac{n\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+1}}</math> よって発散のライプニッツ則から :<math>\nabla\cdot\frac{\boldsymbol{r}}{\|\boldsymbol{r}\|^n}=\left(\nabla\frac{1}{\|\boldsymbol{r}\|^n}\right)\cdot\boldsymbol{r}+\frac{1}{\|\boldsymbol{r}\|^n}\nabla\cdot\boldsymbol{r}=-\frac{n\boldsymbol{r}\cdot\boldsymbol{r}}{\|\boldsymbol{r}\|^{n+2}}+\frac{1+1+1}{\|\boldsymbol{r}\|^n}=\frac{3-n}{\|\boldsymbol{r}\|^n}</math> この結果から、<math>\boldsymbol{a}/\!\!/\boldsymbol{r}\land\|\boldsymbol{a}\|\propto \frac{1}{\|\boldsymbol{r}\|^2}\implies\nabla\cdot\boldsymbol{a}=0</math>(逆二乗則に従う場は非圧縮ベクトル場)が成り立つ。 ベクトル解析の黎明期では発散の逆符号で表される :<math>\mathrm{conv}\,\boldsymbol{a}:=-\frac{\partial{a_x}}{\partial{x}} - \frac{\partial{a_y}}{\partial{y}} - \frac{\partial{a_z}}{\partial{z}}</math> という量が用いられていた。これは'''吸い込み'''(convergence)と呼ばれる量である。 ベクトルが発明される以前、ベクトル演算に相当するものは[[多元数/四元数|四元数]]で記述されていた。純虚四元数同士の積をとると実部が現在で言う内積の-1倍、虚部が現在で言う外積に対応する。このことから、内積そのものである湧き出しではなく内積の-1倍である吸い込みが自然に出現する量として頻繁に扱われていたのである。 ===回転=== 回転運動は、以下の3つにより一意に定まる。 *回転軸の方向 *回転の速さ *回転方向(軸に対して右回転か左回転か) 「回転方向」は暗黙の諒解として右手系の正の回転角で考える。すると、回転運動を表すのに必要な情報は「方向」と「速さ(=スカラー量)」のみとなる。 従って、'''任意の回転運動はベクトルで表示される'''(ベクトルの大きさは「回転の速さ」で定める)。このようなベクトルを'''角速度ベクトル'''という。 ベクトル場の'''回転'''(curl/rotation/rotor)を以下のように定義する。 :<math>\mathrm{curl} \, \boldsymbol{a} = \mathrm{rot} \, \boldsymbol{a} = \begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> <math>\mathrm{curl}</math>は理学系、<math>\mathrm{rot}</math>は工学系が好んで使用する。 <math>z</math>軸方向の成分について考える。 <math>z</math>軸方向の回転はフレミングの左手の法則から<math>xy</math>平面内の成分のみが寄与すると考えられる。<math>z</math>軸の正方向の回転を生むには、<math>x</math>軸方向の変化率を大きくして<math>y</math>軸方向の変化率を小さくすればよい。 ある軸方向の変化率とはその軸の変数に関する偏導関数のことであったので、回転のz成分を<math>\frac{\partial{X_y}}{\partial{x}}-\frac{\partial{X_x}}{\partial{y}}</math>とすれば満足する。 対称性より輪環の順で入れ替えても同様であるので、回転は上の式で表されるとわかる。 これはより厳密には後述の線積分を用いて説明することになるので、ここでは定性的な説明に留めた。 回転を用いた概念として、ファラデーの電磁誘導の法則が有名である。 :電場<math>\boldsymbol{E}</math>、磁束密度<math>\boldsymbol{B}</math>として :<math>\mathrm{rot} \, \boldsymbol{E} = -\frac{\partial{\boldsymbol{B}}}{\partial{t}}</math> 流体の渦の記述にも応用されており、回転を'''渦度ベクトル'''とも呼ぶ。流体力学的な渦の定義は「速度場の回転」である。 回転が零ベクトルであるベクトル場を'''非回転的/渦無し/層状/ラメラー ベクトル場'''(irrotational/lamella vector field)などと呼ぶ。 勾配・発散と同様に空間偏微分演算子による表記を考える。 成分に着目すると外積の形式なので、 :<math>\mathrm{curl} \, \boldsymbol{a}= \nabla \times \boldsymbol{a}</math> と表されることが判る。 ベクトル場はベクトル量であり、ナブラは便宜的にベクトル量と見做すことから、その外積である回転はベクトル量であることが見て取れる。 外積の性質から、回転は行列式 :<math>\det \begin{pmatrix} \boldsymbol{e}_x & \boldsymbol{e}_y & \boldsymbol{e}_z \\ \frac{\partial}{\partial{x}} & \frac{\partial}{\partial{y}} & \frac{\partial}{\partial{z}} \\ a_x & a_y & a_z \end{pmatrix}</math> でも表示される。 回転に対しては以下が成り立つ。 #<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math>(線型性) #<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math>(積の微分・ライプニッツ則) 前者は外積の線型性より、後者は成分演算と勾配の定義より示される。 回転は常に角速度ベクトルと一致するとは限らない。そのため、必ずしも回転運動そのものを記述しない。 回転は、ヤコビ行列を用いると以下のように表される。 :<math>\mathrm{rot} \, \boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> :ここで<math>\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})</math>は反対称行列であり、<math>\mathrm{axl}</math>は反対称行列を軸ベクトルに移す写像である。 ===ラプラシアン=== 上で見てきた勾配・発散・回転はいずれも一階の偏微分作用素であった。 二階偏微分作用素のうち最もよく使われているのがスカラー場に対して勾配の発散をとる演算である。 :<math>\nabla\cdot(\nabla\varphi) = \mathrm{div}(\mathrm{grad}\,\varphi)</math> ここで<math>(\nabla\cdot\nabla)\varphi</math>を計算してみると成分計算から上の<math>\nabla\cdot(\nabla\varphi)</math>に等しいことが容易に判る。則ち、発散作用素<math>\nabla\cdot\,\,</math>、勾配作用素<math>\nabla</math>、スカラー場<math>\varphi</math>の間に結合法則が成り立ってると見做せる。 そこで、<math>\nabla\cdot\nabla</math>を独立した演算子として考えることにする。 以下のように定義される演算子を'''ラプラス演算子'''(ラプラス作用素)という。 :<math>\text{∆}:=\nabla\cdot\nabla=\frac{\partial^2}{\partial{x}^2}+\frac{\partial^2}{\partial{y}^2}+\frac{\partial^2}{\partial{z}^2}</math> 二項目は[[w:記号の濫用]]により<math>\nabla^2</math>と書かれることもある。 但し、<math>\text{∆}</math>は通常のデルタ(Unicode文字名: GREEK CAPITAL LETTER DELTA, U+394)ではなく'''増分記号'''(Unicode文字名:INCREMENT, U+2206)である(が通常のデルタで書かれることが多い)。 ラプラス演算子を<math>C^2</math>級スカラー場に作用させる操作(及びその結果として得るスカラー場)を'''ラプラシアン'''(Laplacian)という。 :<math>\text{∆}\varphi=\frac{\partial^2{\varphi}}{\partial{x}^2}+\frac{\partial^2{\varphi}}{\partial{y}^2}+\frac{\partial^2{\varphi}}{\partial{z}^2}</math> スカラー場のラプラシアンは各成分方向の曲率の和、すなわちスカラー場の各点に於ける突出・沈み込みの度合いを表す。 勾配・発散・回転・ラプラシアンを総称して'''空間微分'''と呼ぶ。 ラプラシアンは[[解析学基礎/偏微分方程式|偏微分方程式]]の記述に用いられている。 :'''ラプラス方程式'''・'''ポテンシャル方程式''':<math>\text{∆}\varphi=0</math> :'''ポアソン方程式''':<math>\text{∆}\varphi=f</math> :'''熱伝導方程式'''・'''拡散方程式''':<math>\text{∆}\psi=k\frac{\partial{\psi}}{\partial{t}}+g</math> :'''波動方程式''':<math>\text{∆}\psi=\frac{1}{\nu^2}\frac{\partial^2{\psi}}{\partial{t}^2}</math> :'''ヘルツホルム方程式''':<math>\text{∆}\varphi=-l^2\varphi</math> ここで<math>\varphi=\varphi(x,y,z),\,f=f(x,y,z),\,\psi=\psi(x,y,z,t),\,k>0,\,g=g(x,y,z,t),\,\nu>0,\,l\in\mathbb{R}</math>である。 なお、ラプラス方程式の解を'''調和関数'''という。 <math>C^2</math>級ベクトル場のラプラシアンは以下のように定義される。 :<math>\text{∆}\boldsymbol{a}=\begin{pmatrix} \text{∆}a_x \\ \text{∆}a_y \\ \text{∆}a_z \end{pmatrix}</math> ここでスカラー場と同様に考えて<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})</math>としたいところではあるが、これは一般には成り立たない。 実際には以下のように表示される。 :<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})=\mathrm{grad}(\mathrm{div}\,\varphi)-\mathrm{rot}(\mathrm{rot}\,\varphi)</math> *証明 :対称性より<math>x</math>成分のみ考えても輪環の順に入れ替えれば他の成分を得る。 ::<math>\nabla\cdot\boldsymbol{a}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}</math> :より ::<math>\{\nabla(\nabla\cdot\boldsymbol{a})\}_x=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}</math> :また、 ::<math>\nabla\times\boldsymbol{a}=\begin{pmatrix} \frac{\partial{a_z}}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}} \end{pmatrix}</math> :より ::<math>\{\nabla\times(\nabla\times\boldsymbol{a})\}_x=\frac{\partial}{\partial{y}}\left(\frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}\right)-\frac{\partial}{\partial{z}}\left(\frac{\partial{a_x}}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}\right)</math> ::<math>=\frac{\partial^2{a_y}}{\partial{y}\partial{x}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{z}\partial{x}}-\frac{\partial^2{a_x}}{\partial{z}^2}</math> :<math>\boldsymbol{a}\in{C^2}</math>より偏微分は可換(シュワルツの定理)なので、<math>\{\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})\}_x</math>を計算すると ::<math>\left(\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_y}}{\partial{x}\partial{y}}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}\right)-\left(\frac{\partial^2{a_y}}{\partial{x}\partial{y}}-\frac{\partial^2{a_x}}{\partial{y}^2}+\frac{\partial^2{a_z}}{\partial{x}\partial{z}}-\frac{\partial^2{a_x}}{\partial{z}^2}\right)</math> ::<math>=\frac{\partial^2{a_x}}{\partial{x}^2}+\frac{\partial^2{a_x}}{\partial {y}^2}+\frac{\partial^2{a_x}}{\partial{z}^2}</math> ::<math>=\text{∆}a_x</math>// ここから判るように、ベクトル場<math>\boldsymbol{a}</math>に対して<math>\text{∆}=\nabla(\nabla\cdot)</math>が成り立つ条件は<math>\nabla\times(\nabla\times\boldsymbol{a})=\boldsymbol{0}</math>である。<math>\boldsymbol{a}</math>が非回転ベクトル場であれば回転が零ベクトルなのでこの形を必ず満足する。但し、この形を満たすベクトル場が全て非回転的ベクトル場であるとは限らない。 則ち、外積の反復と同様に回転演算子<math>\nabla\times\,\,</math>の反復に対して結合法則は不成立である。 歴史的な四元数表記では発散の代わりに吸い込みが用いられていたことからラプラシアンも現在とは反対の符号で計算されていた。ラプラシアンはユークリッド空間に限らず定義可能であるが、その中でも特に重要なのは[[特殊相対論#マクスウェルの方程式|相対性理論]]で用いられる'''ダランベール演算子'''(ダランベルシアン、クアブラ、波動演算子)である。 :<math>\text{⧠}:=\frac{1}{\nu^2}\frac{\partial^2}{\partial{t^2}}-\text{∆}</math> これは標準座標系で表されるミンコフスキー空間上のラプラシアンに相当する。<math>\text{∆}</math>は上で扱ってきた通常のラプラシアンのことである。 これを用いると波動方程式は<math>\text{⧠}\psi=0</math>というミンコフスキー空間上のラプラス方程式と解釈される。つまり、波動関数はミンコフスキー空間で見れば調和関数なのである。 また、[[w:クライン=ゴルドン方程式]]と呼ばれる偏微分方程式は :<math>\text{⧠}\psi=-\mu^2\psi</math> というミンコフスキー空間上のヘルツホルム方程式と解釈される。 ===微分定理=== ここでは、ナブラに関する公式を見ていく。以下、シュワルツの定理が成り立っているものとする。また、成分計算をすればいいだけなので証明は省略する。 既に紹介したものを以下に並べる。 #勾配 #:<math>\nabla(k\varphi+l\psi)=k\nabla\varphi+l\nabla\psi</math> #:<math>\nabla(\varphi\psi)=(\nabla\varphi)\psi+\varphi(\nabla\psi)</math>( #:<math>\nabla\left(\frac{\varphi}{\psi}\right)=\frac{(\nabla\varphi)\psi-\varphi(\nabla\psi)}{\psi^2}</math> #:<math>\nabla(\varphi(\psi))=\frac{d\varphi(\psi)}{d\psi}\nabla\psi</math> #:<math>\frac{\partial{\varphi}}{\partial{\boldsymbol{e}}}=(\boldsymbol{e}\cdot\nabla)\varphi</math> #:<math>\frac{\partial{\boldsymbol{a}}}{\partial{\boldsymbol{v}}}=(\nabla\circledast\boldsymbol{a})\boldsymbol{v}=(\boldsymbol{v}\cdot\nabla)\boldsymbol{a}</math> #発散 #:<math>\nabla\cdot(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\cdot\boldsymbol{a}+l\nabla\cdot\boldsymbol{b}</math> #:<math>\nabla\cdot(\varphi\boldsymbol{a})=(\nabla\varphi)\cdot\boldsymbol{a}+\varphi\nabla\cdot\boldsymbol{a}</math> #:<math>\nabla\cdot\boldsymbol{a}=\mathrm{tr}(\nabla\circledast\boldsymbol{a})</math> #回転 #:<math>\nabla\times(k\boldsymbol{a}+l\boldsymbol{b})=k\nabla\times\boldsymbol{a}+l\nabla\times\boldsymbol{b}</math> #:<math>\nabla\times(\varphi\boldsymbol{a})=(\nabla\varphi)\times\boldsymbol{a}+\varphi\nabla\times\boldsymbol{a}</math> #:<math>\nabla\times\boldsymbol{a} = 2 \,\mathrm{axl} \left( \frac{\nabla \circledast \boldsymbol{a} - {}^t \! (\nabla \circledast \boldsymbol{a})}{2} \right)</math> #ラプラシアン #:<math>\text{∆}\varphi=\nabla\cdot(\nabla\varphi)</math> #:<math>\text{∆}\boldsymbol{a}=\nabla(\nabla\cdot\boldsymbol{a})-\nabla\times(\nabla\times\boldsymbol{a})</math> 二つのベクトル場<math>\boldsymbol{a}, \boldsymbol{b}</math>の内積・外積に対してそれぞれ一階の空間微分を考えてみる。 <math>\boldsymbol{a}\cdot\boldsymbol{b}</math>はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\boldsymbol{a}\cdot\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}+(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}\times(\nabla\times\boldsymbol{b})+\boldsymbol{b}\times(\nabla\times\boldsymbol{a})</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\boldsymbol{a}\times\boldsymbol{b})=\boldsymbol{b}\cdot(\nabla\times\boldsymbol{a})-\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\nabla\times(\boldsymbol{a}\times\boldsymbol{b})=(\nabla\circledast\boldsymbol{a})\boldsymbol{b}-(\nabla\circledast\boldsymbol{b})\boldsymbol{a}+\boldsymbol{a}(\nabla\cdot\boldsymbol{b})-\boldsymbol{b}(\nabla\cdot\boldsymbol{a})</math> 次に、一階の空間微分の結果に対して更なる一階の空間微分を考えてみる。 スカラー場の勾配はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\varphi)=\text{∆}\varphi</math> :<math>\nabla\times(\nabla\varphi)=\boldsymbol{0}</math> ベクトル場の発散はスカラー量なので勾配のみ考えられる。 :<math>\nabla(\nabla\cdot\boldsymbol{a})=\text{∆}\boldsymbol{a}+\nabla\times(\nabla\times\boldsymbol{a})</math> ベクトル場の回転はベクトル量なので発散・回転のみ考えられる。 :<math>\nabla\cdot(\nabla\times\boldsymbol{a})=0</math> :<math>\nabla\times(\nabla\times\boldsymbol{a})=\nabla(\nabla\cdot\boldsymbol{a})-\text{∆}\boldsymbol{a}</math> 則ち、勾配・発散・回転はどの組み合わせでも交換法則が成り立たない。 一階の空間微分の結果に対してラプラシアンを考えてみる。 :<math>\text{∆}(\nabla\varphi)=\nabla(\text{∆}\varphi)</math> :<math>\text{∆}(\nabla\cdot\boldsymbol{a})=\nabla\cdot(\text{∆}\boldsymbol{a})</math> :<math>\text{∆}(\nabla\times\boldsymbol{a})=\nabla\times(\text{∆}\boldsymbol{a})</math> ラプラシアンはスカラー性・ベクトル性を保存するので、演算が破綻する箇所はない。 則ち、ラプラシアンは勾配・発散・回転との組み合わせに対して交換法則が成り立つ。 :<math>\text{∆}\nabla=\nabla\text{∆},\quad\text{∆}(\nabla\cdot)=(\nabla\cdot)\text{∆},\quad\text{∆}(\nabla\times)=(\nabla\times)\text{∆}</math> <math>\boldsymbol{a}\times\boldsymbol{b}</math>及び<math>\nabla\times\boldsymbol{a}</math>の発散・回転は三重積の形であった。 スカラー三重積・ベクトル三重積にナブラを様々な組み合わせで入れてその結果がどうなるか見ていく。 :<math>\boldsymbol{a}\cdot(\nabla\times\boldsymbol{b})</math> :<math>\boldsymbol{a}\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すればいいので公式化する必要が無い。 :<math>\boldsymbol{a}\cdot(\boldsymbol{b}\times\nabla)</math> :<math>\boldsymbol{a}\times(\boldsymbol{b}\times\nabla)</math> :<math>\nabla\cdot(\boldsymbol{a}\times\nabla)</math> :<math>\nabla\times(\boldsymbol{a}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>\boldsymbol{a}\cdot(\nabla\times\nabla)</math> :<math>\boldsymbol{a}\times(\nabla\times\nabla)</math> :<math>\nabla\cdot(\nabla\times\nabla)</math> :<math>\nabla\times(\nabla\times\nabla)</math> は同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。<br> また、三重積の公式はナブラを代入した時点で破綻する。 次に、スカラー四重積・ベクトル四重積に対しても同様のことを考える。 :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\boldsymbol{c})</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\nabla\times\boldsymbol{a})\times(\nabla\times\boldsymbol{b})</math> はそのまま計算すれば良いので公式化する必要が無い。 :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\boldsymbol{c}\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\boldsymbol{c}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\nabla\times\boldsymbol{a})\times(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\nabla)</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\nabla)</math> は偏微分作用素の対象を後接してないので通常の演算としては扱えない。 :<math>(\nabla\times\nabla)\cdot(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\nabla\times\nabla)\times(\boldsymbol{a}\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\cdot(\nabla\times\nabla)</math> :<math>(\boldsymbol{a}\times\boldsymbol{b})\times(\nabla\times\nabla)</math> 及びナブラを三個以上含むものは同じものの外積をとってるので当然<math>0, \boldsymbol{0}</math>である。 故に、ここで問題になるのは :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})</math> の扱いである。 これらには以下の公式が成り立つ。 :<math>(\boldsymbol{a}\times\nabla)\cdot(\boldsymbol{b}\times\boldsymbol{c})=\boldsymbol{a}\cdot\{\nabla\times(\boldsymbol{b}\times\boldsymbol{c})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\boldsymbol{b}\times\boldsymbol{c})=[\{\boldsymbol{b}\cdot(\nabla\times\boldsymbol{c})\}-\{\boldsymbol{c}\cdot(\nabla\times\boldsymbol{b})\}]\boldsymbol{a}+{}^t\!\{\nabla\circledast(\boldsymbol{b}\times\boldsymbol{c})\}\boldsymbol{a}</math> :<math>(\boldsymbol{a}\times\nabla)\cdot(\nabla\times\boldsymbol{b})=\boldsymbol{a}\cdot\{\nabla\times(\nabla\times\boldsymbol{b})\}</math> :<math>(\boldsymbol{a}\times\nabla)\times(\nabla\times\boldsymbol{b})={}^t\!\{\nabla\circledast(\nabla\times\boldsymbol{b})\}\boldsymbol{a}</math> ===ポテンシャル論=== ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすスカラー場<math>\varphi\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0}</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を満たすならば<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>となるスカラー場<math>\varphi\in C^2</math>はどのようなときに存在するのであろうか? ここで<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>は成分表示すれば :<math>\begin{cases} \frac{\partial{a}_z}{\partial{y}}-\frac{\partial{a_y}}{\partial{z}}=0 \\ \frac{\partial{a}_x}{\partial{z}}-\frac{\partial{a_z}}{\partial{x}}=0 \\ \frac{\partial{a_y}}{\partial{x}}-\frac{\partial{a_x}}{\partial{y}}=0 \end{cases}</math> という一階線型連立偏微分方程式となる。 この連立偏微分方程式は領域<math>D=\mathrm{dom}\,\boldsymbol{a}</math>上で解くことになるので、解が<math>\boldsymbol{a}=\mathrm{grad}\,\varphi</math>を満たすかは領域<math>D</math>がどのような形状をしているかに依存する。 そして、その形状を具体的に与えるのが次の定理である。 {{定理|(ポアンカレの補題1)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0} \iff \exist \varphi\in C^2(D),\quad \mathrm{grad}\,\varphi=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が単連結であることである。 {{定理終わり}} 証明は後述する。 この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''スカラーポテンシャル'''(scalar potential)といい、スカラーポテンシャルを有するベクトル場を'''保存的ベクトル場'''(保存場、conservative vector field)という。 保存的ベクトル場に対して実際にスカラーポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{grad}\,\varphi=\boldsymbol{a},\quad\mathrm{rot}\,\boldsymbol{a}=\boldsymbol{0}</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{\varphi}}{\partial{x}}=a_x \\ \frac{\partial{\varphi}}{\partial{y}}=a_y \\ \frac{\partial{\varphi}}{\partial{z}}=a_z \end{cases},\quad\begin{cases} \frac{\partial{a}_z}{\partial{y}}=\frac{\partial{a_y}}{\partial{z}} \\ \frac{\partial{a}_x}{\partial{z}}=\frac{\partial{a_z}}{\partial{x}} \\ \frac{\partial{a_y}}{\partial{x}}=\frac{\partial{a_x}}{\partial{y}} \end{cases}</math> :<math>\frac{\partial{\varphi}}{\partial{x}}=a_x(x,y,z)</math>は直接積分形偏微分方程式なので両辺を<math>x</math>で偏積分して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z) dx+g(y,z)</math>・・・(1) :これを<math>y</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{y}}=\frac{\partial}{\partial{y}}\int_m^x a_x(x,y,z)dx+\frac{\partial{g}}{\partial{y}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\int_m^x \frac{\partial{a_x}}{\partial{y}}dx+\frac{\partial{g}}{\partial{y}}</math> :更に回転の条件から ::<math>=\int_m^x \frac{\partial{a_y}}{\partial{x}}dx+\frac{\partial{g}}{\partial{y}}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_y(x,y,z)-a_y(m,y,z)+\frac{\partial{g}}{\partial{y}}</math> :これが<math>a_y(x,y,z)</math>に等しいので ::<math>\frac{\partial{g}}{\partial{y}}=a_y(m,y,z)</math> :これは<math>g(y, z)</math>が<math>x</math>の関数でないことに適する。 :両辺を<math>y</math>で偏積分して ::<math>g(y, z)=\int_n^y a_y(m,y,z)dy+h(z)</math> :これを(1)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+h(z)</math>・・・(2) :これを<math>z</math>で偏微分すると ::<math>\frac{\partial{\varphi}}{\partial{z}}=\frac{\partial}{\partial{z}}\left(\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy\right)+\frac{\partial{h}}{\partial{z}}</math> :ここでライプニッツの積分法則を適用して ::<math>=\left(\int_m^x\frac{\partial{a_x(x,y,z)}}{\partial{z}}dx+\int_n^y\frac{\partial{a_y(m,y,z)}}{\partial{z}}dy\right)+\frac{dh}{dz}</math> :更に回転の条件から ::<math>=\left(\int_m^x\frac{\partial{a_z(x,y,z)}}{\partial{x}}dx+\int_n^y\frac{\partial{a_z(m,y,z)}}{\partial{y}}dy\right)+\frac{dh}{dz}</math> :よって偏微分に関する微分積分学の基本定理より ::<math>=a_z(x,y,z)-a_z(m,y,z)+a_z(m,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> ::<math>=a_z(x,y,z)-a_z(m,n,z)+\frac{dh}{dz}</math> :これが<math>a_z(x,y,z)</math>に等しいので ::<math>\frac{dh}{dz}=a_z(m,n,z)</math> :これは<math>h(z)</math>が<math>x, y</math>の関数でないことに適する。 :両辺を<math>z</math>で常積分して ::<math>h(z)=\int_l^z a_z(m,n,z)dz+C</math> :これを(2)に代入して ::<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math>// ここで最後の積分定数<math>C</math>は勾配をとるときに消える。更に言うと、単連結領域では偏微分方程式の解の一意性よりスカラーポテンシャルは積分定数の違いを除いて一意に定まる。よって、スカラーポテンシャルは平行移動を同一視する同値類として与えられることになる。 ベクトル場<math>\boldsymbol{a}\in C^1</math>に対して<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>を満たすベクトル場<math>\boldsymbol{A}\in C^2</math>が存在するならば、上で扱った公式より<math>\mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0</math>である。 逆に、ベクトル場<math>\boldsymbol{a}\in C^1</math>が<math>\mathrm{div}\,\boldsymbol{a}=0</math>を満たすならば<math>\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>となるスカラー場<math>\boldsymbol{A}\in C^2</math>はどのようなときに存在するのであろうか? これも同様に以下の定理で与えられる。 {{定理|(ポアンカレの補題2)}} 領域<math>D\subset\mathbb{R}^3</math>とベクトル場<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\mathrm{div}\,\boldsymbol{a}=0 \iff \exist \boldsymbol{A}\in C^2(D),\quad \mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a} </math> となるための十分条件は<math>D</math>が'''可縮'''であることである。 {{定理終わり}} 証明は後述する。 ここで、集合が可縮とは「全体を1点に退化するような連続変形が可能である」ことを言う。可縮な集合は単連結である。可縮条件はより弱めることができるが、ホモトピーやコホモロジーの概念が必要である この<math>\varphi</math>を<math>\boldsymbol{a}</math>の'''ベクトルポテンシャル'''(vector potential)という。スカラーポテンシャルと異なり、「ベクトルポテンシャルを有するベクトル場」を指す特別な呼称は(数学界一般に認知されたものとしては)存在しない。「ソレノイダル場」などを用いる派閥もあるが、単に「発散が0であるベクトル場」を指す用法が強いのであまり広まっていない。 ベクトルポテンシャルを有するベクトル場に対して実際にベクトルポテンシャルを構成することを考える。簡単の為に、定義域は直方体領域(あるいは三次元ユークリッド空間全体)とする。 :<math>\mathrm{rot}\,\boldsymbol{A}=\boldsymbol{a},\quad\mathrm{div}\,\boldsymbol{a}=0</math>を連立偏微分方程式に書き下して ::<math>\begin{cases} \frac{\partial{A}_z}{\partial{y}}-\frac{\partial{A_y}}{\partial{z}}=a_x \\ \frac{\partial{A}_x}{\partial{z}}-\frac{\partial{A_z}}{\partial{x}}=a_y \\ \frac{\partial{A_y}}{\partial{x}}-\frac{\partial{A_x}}{\partial{y}}=a_z \end{cases},\quad \frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}} =0</math> :第一式より ::<math>\frac{\partial{A_z}}{\partial{y}}=a_x+\frac{\partial{A_y}}{\partial{z}}</math> :<math>y</math>で偏積分して ::<math>A_z = \int_n^y \left(a_x+\frac{\partial{A_y}}{\partial{z}}\right)dy+f(x,z)</math> :ライプニッツの積分法則より ::<math>=\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)</math>・・・(3) :第三式より ::<math>\frac{\partial{A_x}}{\partial{y}}=\frac{\partial{A_y}}{\partial{x}}-a_z</math> :<math>y</math>で偏積分して ::<math>A_x=\int_n^y \left(\frac{\partial{A_y}}{\partial{x}}-a_z\right)dy+g(x, z)</math> :ライプニッツの積分法則より ::<math>=\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)</math> :これと(3)を第二式に代入して ::<math>a_y=\frac{\partial}{\partial{z}}\left(\frac{\partial{}}{\partial{x}}\int_n^y A_y dy - \int_n^y a_zdy+g(x,z)\right)-\frac{\partial}{\partial{x}}\left(\int_n^y a_xdy + \frac{\partial}{\partial{z}}\int_n^y A_y dy+f(x,z)\right)</math> ::<math>=\frac{\partial^2}{\partial{z}\partial{x}}\int_n^yA_ydy-\frac{\partial}{\partial{z}}\int_n^y a_z dy+\frac{\partial{g}}{\partial{z}}-\frac{\partial}{\partial{x}}\int_n^y a_x dy-\frac{\partial^2}{\partial{x}\partial{z}}\int_n^y A_y dy-\frac{\partial{f}}{\partial{x}}</math> ::<math>=\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}-\int_n^y \left(\frac{\partial{a_z}}{\partial{z}}+\frac{\partial{a_x}}{\partial{x}}\right)dy</math> :よって ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=a_y+\int_n^y \left(\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_z}}{\partial{z}}\right) dy</math>・・・(4) :この右辺を<math>h(x, y, z)</math>とおくと ::<math>\frac{\partial{h}}{\partial{y}}=\frac{\partial{a_x}}{\partial{x}}+\frac{\partial{a_y}}{\partial{y}}+\frac{\partial{a_z}}{\partial{z}}=0</math> :なので<math>h(x,y,z)</math>は<math>y</math>に依存しない<math>h(x,z)</math>である。 :これは(4)の左辺が<math>y</math>に依存しないことと整合する。 :故に(4)は ::<math>\frac{\partial{g}}{\partial{z}}-\frac{\partial{f}}{\partial{x}}=h(x,z)</math> :という二変数の偏微分方程式に落ちる。 :この偏微分方程式は例えば<math>f(x,z)=0, g(x,z)=\int_l^z h(x,z)dz</math>のような特殊解を持つ。 :このような特殊解によって構成された元の方程式の解を<math>\boldsymbol{A}_0</math>とする。 :一般解<math>\boldsymbol{A}</math>と特殊解との差を<math>\boldsymbol{B}</math>と置くとその回転は回転の線型性より<math>\boldsymbol{0}</math>なので ::<math>\begin{cases} \frac{\partial{B}_z}{\partial{y}}=\frac{\partial{B_y}}{\partial{z}} \\ \frac{\partial{B}_x}{\partial{z}}=\frac{\partial{B_z}}{\partial{x}} \\ \frac{\partial{B_y}}{\partial{x}}=\frac{\partial{B_x}}{\partial{y}} \end{cases}</math> :同様にして第一式・第三式を<math>y</math>で偏積分して第二式に代入すると積分定数に関して ::<math>\frac{\partial{F(x,z)}}{\partial{x}}=\frac{\partial{G(x,z)}}{\partial{z}}</math> :を得る。 :これは全微分方程式が完全微分方程式である条件なので、 ::<math>\mathrm{grad}\,\Phi=\begin{pmatrix} F(x,z) \\ G(x,z) \end{pmatrix}</math> :なるスカラー場<math>\Phi</math>が存在する。 :則ち、求めるベクトルポテンシャルは<math>\boldsymbol{A}=\boldsymbol{A}_0+\nabla\Phi</math>// ここで勾配の項は回転をとるときに<math>\mathrm{rot}(\mathrm{grad}\,\Phi)=\boldsymbol{0}</math>より消える。スカラーポテンシャルと同様に自由度が残るので、ベクトルポテンシャルはその自由度を無視した同値類で与えられる。 ポアンカレの補題1, 2に於ける領域<math>D</math>は互いに素ではない複数の領域の和集合<math>\bigcup_i D_i</math>であっても良い。但しポテンシャル場<math>\mathrm{p}</math>は各領域<math>D_i</math>に対して区分的に定義され、このとき互いに重なった領域<math>D_i\cap D_j</math>では任意の点<math>\boldsymbol{x}\in D_i\cap D_j</math>に対して<math>\mathrm{p}_i(\boldsymbol{x})=\mathrm{p}_j(\boldsymbol{x})</math>であることが導かれる。 ポアンカレの補題が成り立たない状況を考えると、この「重なった領域での単射性」が崩れる。則ち、ポテンシャル場は多価関数として振舞うのである。 ポテンシャルに関連した定理として、以下が成り立つ。 {{定理|(ヘルツホルムの定理)}} ポアンカレの補題が成り立つ状況下に於いて、<math>C^1</math>級ベクトル場<math>\boldsymbol{a}</math>は<math>C^2</math>級スカラー場の勾配と<math>C^2</math>級ベクトル場の回転に[[w:直和分解]]('''ヘルツホルム分解''')できる。 則ち、任意の<math>\boldsymbol{a}\in C^1(D)</math>に対して :<math>\boldsymbol{a}=\mathrm{grad}\,\varphi-\mathrm{rot}\,\boldsymbol{A}</math> を満たす<math>\varphi, \boldsymbol{A}\in C^2(D)</math>が存在する。 {{定理終わり}} *証明 :ポアソン方程式<math>\text{∆}\varphi=f</math>に対してラプラシアンの定義から ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=f</math> :ここで右辺のスカラー関数<math>f</math>が<math>\boldsymbol{a}</math>の発散で与えられている場合を考えると ::<math>\mathrm{div}(\mathrm{grad}\,\varphi)=\mathrm{div}\,\boldsymbol{a}</math> :発散の線型性より ::<math>\mathrm{div}(\mathrm{grad}\,\varphi-\boldsymbol{a})=0</math> :ここでポアンカレの補題2を用いて ::<math>\mathrm{grad}\,\varphi-\boldsymbol{a}=\mathrm{rot}\,\boldsymbol{A}</math>// この<math>\varphi, \boldsymbol{A}</math>をそれぞれ広義のスカラーポテンシャル・ベクトルポテンシャルと呼ぶ場合がある。 広義ポテンシャルに対して :<math>\begin{cases} \mathrm{rot}(\mathrm{grad}\,\varphi)=\boldsymbol{0} \\ \mathrm{div}(\mathrm{rot}\,\boldsymbol{A})=0 \\ \mathrm{div}\,\boldsymbol{a}=\text{∆}\varphi \\ \mathrm{rot}\,\boldsymbol{a}=\mathrm{grad}(\mathrm{div}\,\boldsymbol{A})-\text{∆}\boldsymbol{A} \end{cases}</math> が成立する。 広義ポテンシャルの組み合わせは一つには定まらない。成分毎で考えるとヘルツホルムの定理は三元連立偏微分方程式を与えるが、勾配で消える定数項と回転で消える勾配項を補正すると右辺の自由度は広義ポテンシャル2つ+補正項2つで4である。そこで、応用上は<math>\mathrm{div}\,\boldsymbol{A}=0</math>という条件('''クーロンゲージ条件''')を追加で課して一意に定めることが多い(これにより<math>\mathrm{rot}\,\boldsymbol{a}=-\text{∆}\boldsymbol{A}</math>が成り立つので)。 例えば、[[連続体力学]]に於ける弾性体の運動方程式(ナビエ-コーシー方程式) :<math>\rho\frac{\partial^2{\boldsymbol{u}}}{\partial{t}^2}=(\lambda+\mu)\mathrm{grad}(\mathrm{div}\,\boldsymbol{u})+\mu\text{∆}\boldsymbol{u}</math> をヘルツホルム分解とクーロンゲージ条件により解析すると :<math>\begin{cases} \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\varphi=(\lambda+2\mu)\text{∆}^2\varphi \\ \rho\frac{\partial^2}{\partial{t}^2}\text{∆}\boldsymbol{A}=\mu\text{∆}^2\boldsymbol{A} \end{cases}</math> を得る。 更に<math>e=\text{∆}\varphi,\quad\boldsymbol{\omega}=-\text{∆}\boldsymbol{A}</math>と置くとこの2つの式は波動方程式である。ここから導かれる波は前者が縦波で後者が横波であるが、<math>\lambda+2\mu>\mu</math>より前者の方が伝播速度が大きい。則ち、中学理科のP波・S波の性質を導くことができた。 ナビエ-コーシー方程式に於いて定常状態を考えると<math>t</math>-微分の項が0になるので、<math>\text{∆}^2\boldsymbol{u}=0</math>を得る。このような形の偏微分方程式を'''重調和偏微分方程式'''という。 *応用問題 *:真空のマクスウェル方程式<math> \begin{cases} \nabla\times\boldsymbol{E}&=-\frac{\partial{\boldsymbol{B}}}{\partial{t}}\\ \nabla\times\boldsymbol{H}&=\frac{\partial{\boldsymbol{D}}}{\partial{t}}\\ \nabla\cdot\boldsymbol{D}&=0\\ \nabla\cdot\boldsymbol{B}&=0\\ \end{cases}</math>と構成方程式<math>\begin{cases} \boldsymbol{D}=\varepsilon_0\boldsymbol{E} \\ \boldsymbol{B}=\mu_0\boldsymbol{H}\end{cases}</math>から電磁波の波動方程式<math>\begin{cases} \text{∆}\boldsymbol{E}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{E}}}{\partial{t}^2} \\ \text{∆}\boldsymbol{H}=\frac{1}{c^2}\frac{\partial^2{\boldsymbol{H}}}{\partial{t}^2} \end{cases}</math>及び光速<math>c=\frac{1}{\sqrt{\varepsilon_0\mu_0}}</math>を導け。 ==空間積分== ここでは三次元ユークリッド空間で考える。 ===線積分=== 偏積分 :<math>\int_a^b f(x,y) dx := \lim_{n \to \infty} \sum_{k=1}^{n} f(x_k,y) \Delta x</math>(<math>\Delta x = \frac{b-a}{n}, x_k = a + k\Delta x</math>) は<math>xyz</math>空間を<math>y</math>を固定した平面で切った断面に於ける曲線<math>z=f(x, y)</math>と<math>x</math>軸、直線<math>x=a, x=b</math>の囲む符号付き面積であった。 このとき積分変数を各点で見ると<math>x</math>軸という直線上を<math>a\to b</math>と単調に進むことになるが、これを<math>xyz</math>空間の任意の曲線<math>C</math>に拡張することを考える。 三次元空間の曲線をベクトル表示すると :<math>\boldsymbol{r}(t)=\begin{pmatrix} x(t) \\ y(t) \\ z(t) \end{pmatrix}\quad t\in [\alpha, \beta]</math> であり、被積分関数はこの曲線上の点を入力とするスカラー場と考えられるので :<math>\varphi=\varphi(\boldsymbol{r})</math> 偏積分の<math>dx</math>は「<math>x</math>軸上の微小変位」であったが、<math>t</math>が単調なとき曲線に沿った微小変位は曲線上の移動距離、則ち弧長の微小量と考えられるので線素を用いて :<math>dl=\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> これらを総合すると、<math>C</math>に沿った積分というものは曲線のパラメータを用いて :<math>\int_\alpha^\beta \varphi(\boldsymbol{r}(t))\left\| \frac{d\boldsymbol{r}}{dt} \right\|dt</math> と表示されることになる。 これをスカラー場<math>\varphi</math>の<math>C</math>に沿った'''線積分'''<sup>※</sup>(line integral)という。また、<math>C</math>を'''積分経路'''(積分路、path)という。 <small>※量子力学の[[量子力学#経路積分法|経路積分]](path integral)とは異なる概念である。</small> スカラー場の線積分は :<math>\int_C \varphi dl</math> のように略記される。 特に積分経路が閉曲線('''閉経路''')である場合は :<math>\oint_C \varphi dl</math> のように書き、これを<math>C</math>に沿った'''周回/閉路 積分'''(closed line integral)という。 1の線積分<math>\int_C dl</math>は弧長に等しい。 <math>\varphi(\boldsymbol{r})</math>の<math>C</math>の端点に於ける値の差を考える。 <math>t\in[\alpha,\beta]</math>を各<math>t_i</math>に等分割したとき、スカラー関数のテイラー展開より :<math>\varphi(\boldsymbol{r}(t_i))-\varphi(\boldsymbol{r}(t_{i-1}))=\nabla\varphi(\boldsymbol{r}_{t_i-1})\cdot d\boldsymbol{r}\big|_{t=t_i}+O\left(\left\|d\boldsymbol{r}\big|_{t=t_i}\right\|\right)</math> なので :<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))\fallingdotseq \sum_{i=1}^n \nabla\varphi(\boldsymbol{r}(t_{i-1}))\cdot d\boldsymbol{r}\big|_{t=t_i}</math> 右辺で分割数<math>n</math>を無限大に飛ばした極限は区分求積法より :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r}</math> 則ち、曲線<math>C</math>に沿った微分積分学の基本定理 :<math>\int_{\boldsymbol{r}(\alpha)}^{\boldsymbol{r}(\beta)}\nabla\varphi(\boldsymbol{r})\cdot d\boldsymbol{r} = \varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math> を得る。 これは一変数積分の<math>\int_a^b \frac{df}{dx}dx=f(b)-f(a)</math>に対応し、これは常積分に関する微分積分学の基本定理の別表現である。 左辺をスカラー場の線積分と同様に<math>\int_C \nabla\varphi\cdot d\boldsymbol{r}</math>と書くことにする。 ここで<math>\nabla\varphi</math>を一般のベクトル場<math>\boldsymbol{a}</math>に拡張して同様に :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}</math> を考えてみたい。 ここで<math>d\boldsymbol{r}</math>は<math>\boldsymbol{r}</math>の全微分と解釈され、一変数関数なので :<math>d\boldsymbol{r}=\frac{d\boldsymbol{r}}{dt}dt</math> 則ち、 :<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{r}=\int_\alpha^\beta \boldsymbol{a}(\boldsymbol{r}(t))\cdot\frac{d\boldsymbol{r}}{dt}dt</math> という曲線のパラメータに関する積分に帰着された。 これをベクトル場<math>\boldsymbol{a}</math>の<math>C</math>に沿った'''線積分'''という。 <math>\frac{d\boldsymbol{r}}{dt}</math>は<math>C</math>の接線なので<math>\boldsymbol{a}(\boldsymbol{r})\cdot\frac{d\boldsymbol{r}}{dt}</math>は<math>\boldsymbol{a}</math>から<math>C</math>の接線に沿う沿流成分を取り出していることになる。 このことから、ベクトル場の線積分を特に'''接線積分'''(integral of tangential component)ということがある。 また、<math>d\boldsymbol{r}</math>のノルムを考えてみると :<math>\|d\boldsymbol{r}\|=\left\|\frac{d\boldsymbol{r}}{dt}\right\|dt=dl</math> より線素に一致する。 このことから、<math>d\boldsymbol{r}</math>を'''線素ベクトル'''と呼び、<math>d\boldsymbol{l}</math>とも書く。 線素ベクトルは曲線上の微小変位を表すので座標軸上の微小変位の重ね合わせと考えれば :<math>d\boldsymbol{l}=\begin{pmatrix} dx \\ dy \\ dz \end{pmatrix}</math> よって接線積分は形式的に :<math>\int_C (a_xdx+a_ydy+a_zdz)</math> とも書かれる。 更に、弧長パラメトライズされている場合は接ベクトルを用いて :<math>d\boldsymbol{l}=\boldsymbol{t}ds</math> とも表せる。 接線積分で定義される概念としては、仕事が有名である。 :物体を経路<math>C</math>に沿って力<math>\boldsymbol{F}</math>で運んだときの仕事は摩擦や空気抵抗を無視すると ::<math>W=\int_C \boldsymbol{F}\cdot d\boldsymbol{r}</math> また、アンペールの法則も線積分で示される。 :閉経路<math>C</math>で囲まれた領域を貫く電流の大きさ<math>I</math>とその電流が生む磁場<math>\boldsymbol{H}</math>に対して ::<math>\oint_C \boldsymbol{H}\cdot d\boldsymbol{l}=I</math> 更に、以下のような概念も定義されている。 :流体の速度場<math>\boldsymbol{v}</math>の循環は ::<math>\Gamma(C)=\oint_C \boldsymbol{v}\cdot d\boldsymbol{l}</math> *応用問題 **運ばれる物体の質量を<math>m</math>としたとき、仕事の定義とニュートンの運動方程式<math>m\frac{d^2\boldsymbol{r}}{dt^2}=\boldsymbol{F}</math>を用いて運動エネルギーに関するエネルギーの原理<math>W=\frac{1}{2}mv^2-\frac{1}{2}mv_0^2</math>を証明せよ。 <math>C</math>が正の向きにパラメトライズされたとき、負の向きにパラメトライズされた曲線を<math>-C</math>と表した。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の始点が一致するとき、これを一つの曲線と見做して曲線の和 :<math>C_1+C_2</math> が定義される。 これを'''区分的に定義された曲線'''という。 2つの閉曲線<math>C_1</math>の終点と<math>C_2</math>の終点が一致するとき、<math>C_1</math>を始点とすると曲線の差は :<math>C_1-C_2=C_1+(-C_2)</math> で定義される。 <math>C</math>が'''区分的に滑らか'''であるとは、<math>C</math>が有限個の滑らかな曲線の和であることである。 これらを踏まえると、線積分には以下の性質が成り立つ。 #スカラー場 #:<math>\int_C (k\varphi+l\psi) dl=k\int_C \varphi dl + l \int_C \psi dl</math> #:<math>\int_{-C}\varphi dl = -\int_C \varphi dl</math> #:<math>\int_{C_1+C_2}\varphi dl = \int_{C_1}\varphi dl + \int_{C_2}\varphi dl</math> #ベクトル場 #:<math>\int_C (k\boldsymbol{a}+l\boldsymbol{b})\cdot d\boldsymbol{l}=k\int_C \boldsymbol{a}\cdot d\boldsymbol{l}+l\int_C \boldsymbol{b}\cdot d\boldsymbol{l}</math> #:<math>\int_{-C}\boldsymbol{a}\cdot d\boldsymbol{l} = -\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math> #:<math>\int_{C_1+C_2}\boldsymbol{a}\cdot d\boldsymbol{l} = \int_{C_1}\boldsymbol{a}\cdot d\boldsymbol{l} + \int_{C_2}\boldsymbol{a}\cdot d\boldsymbol{l}</math> 1番目の性質は線型性である。2番目の性質から、パラメータの変数変換('''再パラメトライズ''')が向き付けを保つときに線積分の値が保存されることが判る。 保存的ベクトル場に対する線積分<math>\int_C \boldsymbol{a}\cdot d\boldsymbol{l}</math>はスカラーポテンシャル<math>\varphi</math>を用いて<math>\int_C \nabla\varphi\cdot d\boldsymbol{l}</math>と書けるので微分積分学の基本定理より<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>に等しい。 ここで<math>\varphi(\boldsymbol{r}(\beta))-\varphi(\boldsymbol{r}(\alpha))</math>は曲線の端点にのみ依存し形状には依存しない。 そのため、'''線積分の値が積分経路に依存しない必要十分条件はベクトル場が保存的であること'''である。 ここで閉曲線である場合を考えると :<math>\boldsymbol{r}(\alpha)=\boldsymbol{r}(\beta)</math> より :<math>\varphi(\boldsymbol{r}(\alpha))=\varphi(\boldsymbol{r}(\beta))</math> なので :<math>\oint_C \nabla\varphi\cdot d\boldsymbol{l}=0</math> である。 逆に言うと、'''周回積分が0でない閉経路をとれるとき<math>\varphi</math>は<math>\boldsymbol{a}</math>のスカラーポテンシャルではない'''。 この事実は偏微分方程式を解いて求めたスカラーポテンシャルが実際にポテンシャルであるかどうかの確認に用いられる。 なお、先程求めたスカラーポテンシャルの一般式 :<math>\varphi(x,y,z)=\int_m^x a_x(x,y,z)dx+\int_n^y a_y(m,y,z)dy+\int_l^z a_z(m,n,z)dz+C</math> は線積分で表される。 具体的には、積分経路を<math>\gamma:(m,n,l)\to(m,n,z)\to(m,y,z)\to(x,y,z)</math>という3つの線分の和としてとれば :<math>\varphi=\int_\gamma \boldsymbol{a}\cdot d\boldsymbol{l}+C</math> である。 ここでスカラーポテンシャルとは勾配方程式 :<math>\nabla\varphi=\boldsymbol{a}</math> の解だったので、'''線積分と勾配は逆演算'''である。 <math>\nabla\varphi\cdot d\boldsymbol{l}=d\varphi</math>より、スカラーポテンシャルの存在と完全微分方程式の対応がここからも得られる。また、完全微分方程式<math>d\varphi=0</math>の解は曲線を与えることも容易に判る。 仕事が線積分で定義されるという話をしたが、エネルギーの原理より力場がスカラーポテンシャルを有する(保存場)場合はエネルギー変化が移動経路に依存しないので力学的エネルギー保存法則が成り立つ。これが高校物理で扱った「保存力なら力学エネルギーが保存する」ことの正式な表現である。 ベクトル場の線積分はベクトル場と線素ベクトルの内積をとって積分していたが、外積をとって積分することもできる。 具体的には、 :<math>\boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} a_ydz-a_zdy \\ a_zdx-a_xdz \\ a_xdy-a_ydx \end{pmatrix}</math> より :<math>\int_C \boldsymbol{a}\times d\boldsymbol{l}=\begin{pmatrix} \int_C (a_ydz-a_zdy) \\ \int_C (a_zdx-a_xdz) \\ \int_C (a_xdy-a_ydx) \end{pmatrix}</math> :<math>=\begin{pmatrix} \int_\alpha^\beta \left\{ a_y(\boldsymbol{r}(t))\frac{dz}{dt}-a_z(\boldsymbol{r}(t))\frac{dy}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_z(\boldsymbol{r}(t))\frac{dx}{dt}-a_x(\boldsymbol{r}(t))\frac{dz}{dt} \right\}dt \\ \int_\alpha^\beta \left\{ a_x(\boldsymbol{r}(t))\frac{dy}{dt}-a_y(\boldsymbol{r}(t))\frac{dx}{dt} \right\}dt \end{pmatrix}</math> これは物理学的にはビオ・サヴァールの法則の記述に用いられている。 :真空中で経路<math>C</math>を正の向きに流れる強さ<math>I</math>の定常電流・<math>C</math>上にない点<math>\mathrm{P}</math>・<math>C</math>上の点<math>\mathrm{Q}</math>に対し、<math>C</math>全体で生じる磁束密度<math>\boldsymbol{B}</math>の<math>\mathrm{P}</math>での値は真空の透磁率<math>\mu_0</math>として ::<math>\boldsymbol{B}(\mathrm{P})=\frac{\mu_0 I}{4\pi}\int_C \frac{\overrightarrow{\mathrm{PQ}}\times d\boldsymbol{l}}{\|\overrightarrow{\mathrm{PQ}}\|^3}</math> 積分経路を流線上にとると、流線の定義から<math>d\boldsymbol{r}/\!\!/\boldsymbol{a}(\boldsymbol{r})</math>則ち一次従属なので、<math>d\boldsymbol{r}=k\boldsymbol{a}(\boldsymbol{r})</math>と書ける。 よって線積分の被積分関数は<math>\boldsymbol{a} \cdot d\boldsymbol{r} = k\|\boldsymbol{a}\|^2</math>となり、積分値が最大化される他、ベクトル場の沿流方向成分を抽出できる。実際に計算する際は、<math>\int_{\mathrm{streamline}} k\|\boldsymbol{a}\|^2</math>とは書かず、<math>\int_{\mathrm{streamline}} \boldsymbol{a} \cdot \frac{d\boldsymbol{r}}{dt}dt</math>と書くのが望ましい(積分記号と積分微小要素はセットのため)。 流線が閉曲線である場合を考えると、<math>\oint_{\mathrm{streamline}} \boldsymbol{a} \cdot \frac{d\boldsymbol{r}}{dt}dt</math>は閉曲線の正の向きで正、負の向きで負となるので0にはならない。そのため、流線が閉曲線であるベクトル場はスカラーポテンシャルを持たない。 ===面積分=== ===体積分=== ===積分定理=== ==発展事項== {{節stub}} {{Advanced|多様体論}} {{Advanced|微分幾何学}} {{Advanced|積分幾何学}} ここではベクトル解析の発展編及び微分幾何学の基礎編として、「ユークリッド空間の部分多様体上の微分幾何学」を扱う。言うなれば「<math>n</math>次元版のベクトル解析学」である。 ===体積分再考=== 体積分は先程「<math>\mathbb{R}^3</math>上の閉立体<math>V</math>」上で考えたが、実はここには線積分・面積分との大きな非対称性がある。 線積分は「曲線」、面積分は「曲面」を積分領域としたが、先程定義した体積分の積分領域は「平坦な立体」なのである(二次元で例えば楕円領域<math>\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq1</math>は境界こそ"曲線"だが空間そのものは<math>\mathbb{R}^2</math>という"平面"であることと同じ)。 1次元の曲がった空間である曲線<math>M^1:\boldsymbol{r}=\boldsymbol{r}(s)</math>が<math>\mathbb{R}^2</math>内、2次元の曲がった空間である曲面<math>M^2:\boldsymbol{r}=\boldsymbol{r}(s, t)</math>が<math>\mathbb{R}^3</math>内に存在するように、3次元の曲がった空間である曲立体<math>M^3:\boldsymbol{r}=\boldsymbol{r}(s, t, u)</math>は<math>\mathbb{R}^4</math>内に存在すると考えるのが自然である。ここで一般に<math>M^n\subset\mathbb{R}^{n+1}</math>が成り立つと予想され、この関係を「<math>M^n</math>の<math>\mathbb{R}^{n+1}</math>への'''埋め込み'''」と呼ぶことにする。 線積分を<math>C=M^1</math>、面積分を<math>S=M^2</math>で定義したように、体積分を<math>M^3</math>で定義することを考える。 媒介変数空間<math>\begin{pmatrix} s \\ t \\ u \end{pmatrix} \in V \subset\mathbb{R^3}</math>上の微小変化を考えると全微分を用いて :<math>d\boldsymbol{r}=\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds+\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt+\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math> よって<math>V</math>上の微小立方体<math>dsdtdu</math>は3ベクトル<math>\frac{\partial{\boldsymbol{r}}}{\partial{s}}ds,\quad\frac{\partial{\boldsymbol{r}}}{\partial{t}}dt,\quad\frac{\partial{\boldsymbol{r}}}{\partial{u}}du</math>の張る微小平行六面体へ移される。 体素はこの微小平行六面体の体積と考えられるが、<math>\boldsymbol{r}\in\mathbb{R}^4</math>より当然この3ベクトルは4項ベクトルなので、'''外積を含んでいるスカラー三重積は使えない'''。 全微分を一次変換表記すると :<math>d\boldsymbol{r}=\begin{pmatrix} \frac{\partial{\boldsymbol{r}}}{\partial{s}} & \frac{\partial{\boldsymbol{r}}}{\partial{t}} & \frac{\partial{\boldsymbol{r}}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\begin{pmatrix} \frac{\partial{x}}{\partial{s}} & \frac{\partial{x}}{\partial{t}} & \frac{\partial{x}}{\partial{u}} \\ \frac{\partial{y}}{\partial{s}} & \frac{\partial{y}}{\partial{t}} & \frac{\partial{y}}{\partial{u}} \\ \frac{\partial{z}}{\partial{s}} & \frac{\partial{z}}{\partial{t}} & \frac{\partial{z}}{\partial{u}} \\ \frac{\partial{w}}{\partial{s}} & \frac{\partial{w}}{\partial{t}} & \frac{\partial{w}}{\partial{u}} \end{pmatrix} \begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> :<math>=\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\begin{pmatrix} ds \\ dt \\ du \end{pmatrix}</math> ここでヤコビ行列は<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\in\mathbb{R}^{4\times3}</math>であって'''正方行列でないので行列式も求まらない'''。 そこで、[[線型代数学続論/種々の行列#随伴行列|グラム行列]]を利用することを考える。 '''グラム行列は必ず半正定値行列'''なので行列式は非負であり、平方根をとれる。 そのため、<math>\mathbf{G}:=\left(\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}\right)^*\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>として<math>\sqrt{\det\mathbf{G}}</math>を体積拡大率とする。 これは正方行列ならヤコビアンの絶対値に一致する。 {{NavTop|title=補足:体積拡大率に一致する証明}} :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}</math>の列ベクトルにグラム=シュミットの直交化法を適用すると[[線型代数学続論/行列分解|QR分解]]によって :<math>\frac{\partial{(x, y, z, w)}}{\partial{(s, t, u)}}=\mathbf{QR}\quad (\mathbf{Q}\in\mathbb{R}^{4\times3}, \mathbf{R}\in\mathbb{R}^{3\times3})</math> よって :<math>\mathbf{G}=(\mathbf{QR})^*\mathbf{QR}</math> :<math>=\mathbf{R}^*\mathbf{Q}^*\mathbf{Q}\mathbf{R}</math> :<math>=\mathbf{R}^*\mathbf{E}_3\mathbf{R}</math>(<math>\because\mathbf{Q}</math>は列ユニタリ行列) :<math>=\mathbf{R}^*\mathbf{R}</math> :<math>\therefore \sqrt{\det\mathbf{G}}=\sqrt{\det\left( \mathbf{R}^*\mathbf{R} \right)}=\sqrt{\left(\det\mathbf{R}\right)^2}=|\det\mathbf{R}|</math> <math>\mathbf{Q}</math>は列ユニタリ行列なのでその一次変換は等長変換であり、全微分による拡大率は<math>\mathbf{R}</math>による拡大率と一致する。<br/> 則ち、<math>\sqrt{\det\mathbf{G}}</math>を拡大率としてとれる。// {{NavBottom}} よって体積分は :<math>\iiint_{M^3} f(\boldsymbol{r})dM^3 = \iiint_{V} f(\boldsymbol{r}(s, t, u))\sqrt{\det\mathbf{G}}\,dsdtdu</math> ここから、適切な媒介変数表示が存在するならば<math>M^n</math>上での体積分の計算に<math>\mathbb{R}^{n+1}\setminus M^n</math>の情報は入ってこず、<math>M^n</math>の情報のみで計算されると予想される。 実際、<math>M^n</math>に適切な媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})\quad(\boldsymbol{p}\in\mathbb{R}^n)</math>が存在するとき、全微分による一次変換の拡大率は同様にグラム行列式の平方根で与えられるので体積素は<math>dM^n = \sqrt{\det\mathbf{G}} \prod_{k=1}^{n}d\boldsymbol{p}_k</math>と書け、これは正しい。 なお、二次元の場合を考えると<math>\mathbf{G}=\mathbf{K}</math>より<math>dM^2=dS</math>であり、面素に一致する。一次元の場合を考えると<math>\mathbf{G}=\|d\boldsymbol{r}\|^2</math>より<math>dM^1=dl</math>であり、線素に一致する。 実は、体素だけでなく一般に角度や長さといった幾何学的な量は埋め込み先である<math>\mathbb{R}^{n+1}</math>の情報を全く必要とせず、<math>M^n</math>の情報だけで構成できることが知られている。このことは微分幾何学のうち[[w:リーマン幾何学|リーマン幾何学]]と呼ばれる分野で詳しく扱われる。 ここまで<math>M^n</math>を適切な媒介変数<math>\boldsymbol{p}\in\mathbb{R}^n</math>で表すことを強調してきたが、媒介変数表示を考えるということは<math>M^n</math>から媒介変数空間<math>U\subset\mathbb{R}^n</math>への射影<math>\pi:M^n\to U</math>を考えるということである。 ここで、この<math>\pi</math>が全単射ならば逆向きの射影<math>\pi^{-1}:U\to M^n</math>が存在してそれが媒介変数表示<math>\boldsymbol{r}=\boldsymbol{r}(\boldsymbol{p})</math>となるわけであるが、これは以下のようにも捉えられる。 :<math>\pi</math>によって射影した平坦な空間で座標を設定すると、'''適切な逆変換<sup>※</sup>によって曲がった空間<math>M^n</math>上に(局所)座標系を与えることができる'''。 つまり、体積分を媒介変数空間に置換積分するということは、逆に体積分の元の表示が「<math>M^n</math>上の局所座標系に於ける積分」であることを示している。 ※この適切な逆変換が存在する条件は'''陰関数定理そのもの'''である。 ここで、適切な媒介変数表示が存在するよう<math>M^n</math>に制限を課したものが、以下で扱う'''多様体'''である。 ===多様体=== ===微分形式=== [[線型代数学続論/外積代数]]も参照。 ===リーマン計量=== ===テンソル解析=== [[線型代数学続論/テンソル代数]]も参照。 ===複素ベクトル解析=== [[複素解析学]]も参照。 {{DEFAULTSORT:へくとるかいせき}} [[Category:解析学]] [[Category:微分積分学]] [[Category:ベクトル解析|かいせきかくきそ]] sb65h4dfkv31xru8my5ui5l0jc8vx4x 野球/変化球/ナックルカーブ 0 48151 304552 300274 2026-10-10T12:56:45Z ~2026-54472-03 92762 /* */ 気持ちを込めて 304552 wikitext text/x-wiki ナックルカーブ(Knuckle Curve)とは、カーブより強い回転を与えるために、ナックルの握り(指を立てる)を使って投げる高速カーブで、球速が速く、かつ落差が大きく、キレが鋭いという特徴を持つ球種です。ちんちん ==特徴== [[ファイル:Knuckle curve 1.JPG|サムネイル|ナックルカーブの握り]] トップスピン *指を立てることで回転が強くなり、カーブより鋭く落ちます。 球速が速い *120~130km/h程度で、スライダーに近いスピード感があります。 縦変化 *横変化は少なく、真上から真下に落ちるタイプが多いです。 ==投げ方== 握り方 *人差し指を立て(または折り曲げ)、中指を縫い目に深くかけ、親指でボールの下を支えます。 リリース *手首を強くひねりすぎず、中指で弾くように回転を与えます。 ==戦略== [[野球/変化球/パワーカーブ#戦略]]を参考。 ==弱点== 握りが特殊 *指を立てる(または折り曲げる)ことに慣れるまで制球が安定しにくいので、取得が難しいです。 ==変化球== {{変化球マップ}} {{DEFAULTSORT:やきゆうへんかきゆうなつくるかあふ}} [[Category:野球]] [[カテゴリ:変化球]] [[カテゴリ:カーブ系]] [[カテゴリ:縦カーブ]] 58etvqp8z4zp8082vfiqi62e9qsizr5 304554 304552 2026-10-10T12:57:10Z ~2026-54472-03 92762 /* */ 304554 wikitext text/x-wiki ナックルカーブ(Knuckle Curve)とは、カーブより強い回転を与えるために、ナックルの握り(指を立てる)を使って投げる高速カーブで、球速が速く、かつ落差が大きく、キレが鋭いという特徴を持つ球種です ==特徴== [[ファイル:Knuckle curve 1.JPG|サムネイル|ナックルカーブの握り]] トップスピン *指を立てることで回転が強くなり、カーブより鋭く落ちます。 球速が速い *120~130km/h程度で、スライダーに近いスピード感があります。 縦変化 *横変化は少なく、真上から真下に落ちるタイプが多いです。 ==投げ方== 握り方 *人差し指を立て(または折り曲げ)、中指を縫い目に深くかけ、親指でボールの下を支えます。 リリース *手首を強くひねりすぎず、中指で弾くように回転を与えます。 ==戦略== [[野球/変化球/パワーカーブ#戦略]]を参考。 ==弱点== 握りが特殊 *指を立てる(または折り曲げる)ことに慣れるまで制球が安定しにくいので、取得が難しいです。 ==変化球== {{変化球マップ}} {{DEFAULTSORT:やきゆうへんかきゆうなつくるかあふ}} [[Category:野球]] [[カテゴリ:変化球]] [[カテゴリ:カーブ系]] [[カテゴリ:縦カーブ]] 577wzsp3xqaa2wpwl4h1q0bnztx54g4 304557 304554 2026-10-10T14:03:19Z Kyube 57 copyedit 304557 wikitext text/x-wiki ナックルカーブ(Knuckle Curve)とは、カーブより強い回転を与えるために、ナックルの握り(指を立てる)を使って投げる高速カーブで、球速が速く、かつ落差が大きく、キレが鋭いという特徴を持つ球種です。 ==特徴== [[ファイル:Knuckle curve 1.JPG|サムネイル|ナックルカーブの握り]] トップスピン *指を立てることで回転が強くなり、カーブより鋭く落ちます。 球速が速い *120〜130km/h程度で、スライダーに近いスピード感があります。 縦変化 *横変化は少なく、真上から真下に落ちるタイプが多いです。 ==投げ方== 握り方 *人差し指を立て(または折り曲げ)、中指を縫い目に深くかけ、親指でボールの下を支えます。 リリース *手首を強くひねりすぎず、中指で弾くように回転を与えます。 ==戦略== [[野球/変化球/パワーカーブ#戦略]]を参照。 ==弱点== 握りが特殊 *指を立てる(または折り曲げる)ことに慣れるまで制球が安定しにくいので、習得が難しいです。 ==変化球== {{変化球マップ}} {{DEFAULTSORT:やきゆうへんかきゆうなつくるかあふ}} [[Category:野球]] [[カテゴリ:変化球]] [[カテゴリ:カーブ系]] [[カテゴリ:縦カーブ]] azs3jrahb1wqj49wng1qfo8mad2yb5v 高等学校日本史探究/律令体制再編期の政治と社会Ⅰ 0 48906 304558 304544 2026-10-10T14:19:31Z Kwawe 68789 /* 平安京遷都と東北経営 */ 重要用語を黒太字化。 304558 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] k5358rohdspecmdtiut5m3wgnq9xq3s 304560 304558 2026-10-10T15:11:10Z Kwawe 68789 /* 平安京遷都と東北経営 */ 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やした。 304560 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やしました。平安京移転後も工事は続き、畿内周辺地域・畿内の派遣労働者を造宮職に集めました。朝廷は蝦夷鎮圧のため兵士を送って、物資も現地に送りました。やがて農民の生活は苦しくなり、田畑を捨てました。税金まで朝廷に入らなくなり、国の予算も赤字になりました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] 6h6bvmbe6tjqjoskh15roprlr68tr65 304561 304560 2026-10-10T15:11:51Z Kwawe 68789 /* 平安京遷都と東北経営 */ 805年、桓武天皇は政治を立て直したいため、国務大臣[参議]の菅野真道と藤原緒嗣の意見を聞いた。 304561 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やしました。平安京移転後も工事は続き、畿内周辺地域・畿内の派遣労働者を造宮職に集めました。朝廷は蝦夷鎮圧のため兵士を送って、物資も現地に送りました。やがて農民の生活は苦しくなり、田畑を捨てました。税金まで朝廷に入らなくなり、国の予算も赤字になりました。 805年、桓武天皇は政治を立て直したいため、国務大臣[参議]の菅野真道と藤原緒嗣の意見を聞きました(徳政相論・徳政論争)。菅野真道の意見は継続案でした。しかし、藤原緒嗣の意見は停止案でした。平安京造営工事[造作]と蝦夷鎮圧[軍事]を今すぐ停止したら、公民の負担まで消えるだろうと桓武天皇に伝えました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] hio004jdc2zlwakcevd7b66pg84ms0m 304563 304561 2026-10-10T16:10:49Z Kwawe 68789 /* 平安京遷都と東北経営 */ 坂上田村麻呂の絵を追加。 304563 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 [[ファイル:Sakanoue Tamuramaro sw-colored.jpg|サムネイル|215x215ピクセル|坂上田村麻呂]] その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やしました。平安京移転後も工事は続き、畿内周辺地域・畿内の派遣労働者を造宮職に集めました。朝廷は蝦夷鎮圧のため兵士を送って、物資も現地に送りました。やがて農民の生活は苦しくなり、田畑を捨てました。税金まで朝廷に入らなくなり、国の予算も赤字になりました。 805年、桓武天皇は政治を立て直したいため、国務大臣[参議]の菅野真道と藤原緒嗣の意見を聞きました(徳政相論・徳政論争)。菅野真道の意見は継続案でした。しかし、藤原緒嗣の意見は停止案でした。平安京造営工事[造作]と蝦夷鎮圧[軍事]を今すぐ停止したら、公民の負担まで消えるだろうと桓武天皇に伝えました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] nmdpe13ea3uotulcbx5w2z98guebpjc 304576 304563 2026-10-10T23:14:55Z Kwawe 68789 /* 平安京遷都と東北経営 */ 本節完成。 304576 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 [[ファイル:Sakanoue Tamuramaro sw-colored.jpg|サムネイル|215x215ピクセル|坂上田村麻呂]] その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やしました。平安京移転後も工事は続き、畿内周辺地域・畿内の派遣労働者を造宮職に集めました。朝廷は蝦夷鎮圧のため兵士を送って、物資も現地に送りました。やがて農民の生活は苦しくなり、田畑を捨てました。税金まで朝廷に入らなくなり、国の予算も赤字になりました。 805年、桓武天皇は政治を立て直したいため、国務大臣[参議]の菅野真道と藤原緒嗣の意見を聞きました(徳政相論・徳政論争)。菅野真道の意見は継続案でした。しかし、藤原緒嗣の意見は停止案でした。平安京造営工事[造作]と蝦夷鎮圧[軍事]を今すぐ停止したら、公民の負担まで消えるだろうと桓武天皇に伝えました。 桓武天皇が自分の考えを通すために統治行為論を取り入れていました。その結果、藤原緒嗣の意見を選びました。その後、朝廷は平安京造営工事を縮小して蝦夷鎮圧も諦めました。また、朝廷は造宮職もなくして、当初の計画変更・中止も目立ちました。それでも、平安京は姿を少しずつ変えました。806年、桓武天皇は亡くなりました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] 2qavcaw4445mm9m4vya6eijmoytfnua 304617 304576 2026-10-11T09:11:38Z Kwawe 68789 /* 平安京遷都と東北経営 */ 304617 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅰ 本節では天皇の政治史について取り上げます。古代の天皇婚姻制度史は明治以降から現代までの婚姻制度(一夫一妻制)と違います。ここに注意して読み進めましょう。 == 平安京遷都と東北経営 == 古代の天皇の結婚制度は、明治以降の一夫一婦制と大きく違っていました。天皇は複数の妻を持つ一夫多妻制(後宮制度)でした。妻の身分から次の天皇を誰にするかで揉めました。奈良時代後期でも同じように起こっています。道鏡は称徳天皇の死去後に都から追い出されました。天武天皇の家族ではなく天智天皇の家族が天皇になれるように藤原永手と藤原百川達で後押ししました。770年、これを受けて天智天皇の施基皇子の子供〈白壁王〉が天皇の立場に就いて光仁天皇となりました。その結果、天皇の家族は天武天皇から天智天皇へと大きく入れ替わりました。光仁天皇は井上内親王を皇后として息子の他戸親王を皇太子として決めましたが、その役職から2人とも首になりました。 [[ファイル:Emperor Kammu large.jpg|サムネイル|211x211ピクセル|桓武天皇]] また、光仁天皇は百済系渡来氏族と繋がりを持つ和氏出身の高野新笠を妻にしています。高野新笠と結婚後、息子の山部親王が生まれました。その後、藤原百川などは非嫡出子の山部親王を次の天皇になれるように後押ししました。781年、山部親王は光仁天皇から天皇の立場を継いで<span style="color:#f29100">'''桓武天皇'''</span>になりました。やがて光仁天皇は上皇となり、782年に亡くなりました。光仁天皇は、役所の仕事を簡単にしたり、予算の無駄遣いを無くしたり、公民・民衆の負担を軽くしたりしてこれまでの政治を立て直しました。桓武天皇も光仁天皇のやり方をそのまま続けました。 桓武天皇は、光仁天皇(天智天皇の家族)の新しい政治様式を引き継ぎました。天智天皇の家族が天皇を引き継ぐ理由として中国王朝の交替史を根拠にしました。中国の皇帝が行う儀式をそのまま日本でも取り入れて、天皇の立場を公民・民衆に分かるようにしました。また高野新笠のつながりから、渡来系氏族の百済王氏と仲良くなりました。もちろん、藤原種継などの藤原氏とも仲良くなりました。桓武天皇は国内政治の仕事を真面目に取り組む天皇でした。左大臣を無くして、貴族が直接政治を行う新しい政治制度にしました。平安時代初期の嵯峨天皇までに天皇を国家元首として政治の決定権を持つような律令体制へ再編しました。 桓武天皇の主要政策は新都造営と東北経営でした。有力な氏族同士が「我が氏族こそ国家の中心」で何度も争って、平城京の政治も混乱しました。奈良の大寺院も政治に「早くやれ」と文句を言うようになりました。称徳天皇・道鏡の時代に仏教思想を取り入れすぎており、天皇がやりたい政治を自由に行えなくなりました。したがって、天智天皇の子供が新しい天皇になれるようにこれまでの政治の進め方を変えて、国家元首として律令国家を立て直したかったから新しい都を探しました。 784年朔旦冬至の日(旧暦11月1日)、桓武天皇は<span style="color:#f29100">'''長岡京'''</span>遷都の詔を出しました。その10日後(旧暦11月11日)、平城京から山背国乙訓郡の長岡京へ都を移しました。長岡京は京都盆地の南西部にあり、淀川水系(桂川・宇治川)から難波津・瀬戸内海方面へ行きやすく、交通でも最も重要な場所でした。秦氏などのように渡来系氏族が長岡京に住んでいて、天皇の家族と深い繋がりを持っていました。桓武天皇は高野新笠も渡来系氏族と繋がっており、情報共有からこの場所を選びました。なお、784年は甲子でした。甲子は現代で使われておらず、馴染みもないので、ここで説明します。甲子は丙午と同じく60年に一度巡る干支の始まりの年です。甲子は古代の中でも特に大黒天の縁年でした。朔旦冬至は月の始まりと冬至と重なり、とても珍しく縁起の良い日でした。 藤原種継が中心になって長岡京の造営工事を進めました。工事を早く終わらせるために、難波宮・平城宮・平城京の建物と材料をそのまま長岡京でも使いました。発掘調査でも難波宮・平城宮の瓦が長岡宮跡で見つかっています。 ヤマト政権の時代から、都は大和盆地に置かれていました。当時の難波は陪都として使われていました。難波津を管理するため、役所の摂津職も置かれていました。しかし、難波宮は長岡京の造営工事から784年に取り壊されました。難波宮の建築資材も長岡京の造営工事に使われ、難波は副都としての役割を失いました。摂津職も793年に廃止されました。政治上の重要地域に副都のような都市を置く例が中国の周・漢・唐などで見られました。このような中国王朝の都市制度から難波が陪都として置かれました。 785年、藤原種継が長岡京の造営工事中に暗殺されました(藤原種継暗殺事件)。旧豪族の人々[大伴氏・佐伯氏など]が藤原種継暗殺事件の犯人として死刑になりました。早良親王も藤原種継暗殺事件への関わりを疑われ、皇太子の地位を失いました。その後、早良親王は乙訓寺に閉じこめられ、淡路国へ送られました。しかし早良親王は無罪と訴えて食事をとらなくなり、淡路国へ向かう途中で亡くなりました。 また、高野新笠[桓武天皇の母]・皇后・夫人などのように桓武天皇の側近が相次いで亡くなりました。新皇太子の安殿親王も病気になりました。長岡京は洪水などの水害も起こりました。さらに長岡京の造営工事にも問題があり、国内政治もずっと混乱しました。このような出来事は早良親王怨霊からの祟りだと占いで信じられるようになりました。 桓武天皇は早良親王に死後の天皇名として崇道天皇を贈りました。そして、何度も早良親王の怨霊を静めて、成仏させました。可哀そうな故人の怨霊は世の中を荒らしやすく、この怨霊を怖がるようになりました。この考えから、御霊信仰へと広がりました。863年、早良親王らの霊を神泉苑の御霊会で慰めました。903年、菅原道真が大宰府で亡くなりました。その後、雷が内裏に落ちたり、藤原時平の一族も相次いで亡くなったりしました。公民・民衆はこれらを道真の祟りだと考えました。その後、道真は神として慰められるようになり、天神信仰にもつながりました。[[ファイル:HeiankyouMap.svg|サムネイル|359x359ピクセル|平安京の地図]]桓武天皇は早良親王の怨霊を怖がっていました。また水害も長岡京で頻繁に起こり、長岡京の政治問題と造営問題に繋がりました。そのため、桓武天皇は再び都の移転方針を決めました。和気清麻呂がこの移転方針に関わりました。794年、和気清麻呂の意見を取り入れて平安京が山背国葛野郡宇太に造られ、都も長岡京から<span style="color:#f29100">'''平安京'''</span>へ移りました。 新しい都は大阪湾の方まで賀茂川などの川を使って人間と貨物を舟で運びやすく、東海道・北陸道・東山道・山陰道へ向かう道路にも繋がっていました。また、賀茂川などの水も利用出来ました。秦氏がこの地域の土地開発に関わっていました。平安京の名前が新しい都に付けられ、名前も山背国から山城国へ改められました。平安京の名前まではその土地の地名をそのまま都の名前に使っていました。新しい都の完成を祝って、踏歌が宮中で行われ、「新京楽、平安楽土、万年春」と歌われました。新しい都を喜び、平和で豊かな都も長く続くように願う気持ちが踏歌に込められていました。このお祝いの言葉が平安京の名前と結びついているかもしれません。 平安京は東西約4.5km、南北約5.2〜5.3kmもありました。東西に平行な道路、南北に垂直な道路が都の中を通っており、区画も四角く区切られていました(条坊制)。平安京は九条八坊に分けられ、都の中央へ朱雀大路を南北に通していました。羅城門は朱雀大路南端にありました。このような造り方は平城京と同じような作り方でした。大内裏が平安京の北側にありました。内裏・朝堂院・豊楽院・二官八省の庁舎・蔵・寮・司などが大内裏に集まっていました。なお、天皇の皇居[清涼殿・後宮・紫宸殿]は内裏にありました。 朱雀大路の東側を左京、朱雀大路の西側を右京としました。ここで間違えて欲しくないのは外から見ての方角でなく大内裏から見ての方角になります。東寺・西寺・市・鴻臚館・官寺などは都の東側と西側に分かれて置かれました。神泉苑が左京三条一坊にありました。天皇が神泉苑を訪れ、狩り・祭り・遊びに使われました。平城京と異なり、東側に比叡山・東山が迫っており、平安京の形も綺麗に作られました。 [[ファイル:180427 Model of Rajōmon gate at Kyoto station.jpg|サムネイル|平安京羅城門 復元模型]] 鴨川と桂川は貨物を運ぶために使われ、平安京の住民達[公民・貴族]の生活を支えました。しかし、桓武天皇は平安京造営工事を途中で止めました。また、湿地は右京に集まっており、住宅もそんなに建ちませんでした。これに対して、上級貴族の屋敷などは左京に集まり賑わいました。慶滋保胤『池亭記』に「平安京の住民達[公民・貴族]は右京から離れ、鴨川付近や東山方面へ住むようになった。」と記しています。 以後、上級貴族の家[御所・貴族の屋敷]と寺院は京都に集まり、文化の中心地にもなりました。白河離宮・鳥羽離宮が院政期に建てられ、白河地域と鳥羽地域の住民を増やしました。平家も六波羅地域・西八条地域にまとまって住みました。このように都市は平安京の外側にも広がり、中世の京都を作りました。現在の京都御所・紫宸殿は近世になってから建て直されており、平安京造営当時の建物内部からかけ離れています。一方、平安京の条坊制は京都市の町並みと京都市の道路に現在も残っています。天皇は明治維新までの1000年以上にわたって、平安京に住んでいました。794年の平安京遷都から源頼朝が鎌倉幕府成立までの約400年間を<span style="color:#f29100">'''平安時代'''</span>といい、国内政治の中心となりました。 奈良時代後半から平安時代初期にかけての85年間で、道祖王・他戸親王・早良親王・高丘親王・恒貞親王が次々と皇太子の役職を失いました。天皇家内部で次期天皇を誰にするかを巡って争われ、この時期の皇太子は様々な事件に巻き込まれて次期天皇に選ばれませんでした。 高丘親王[平城天皇の第3皇子]は嵯峨天皇の皇太子になりました。しかし薬子の変の被疑者とされ、皇太子の役職を失いました。高丘親王は皇太子の役職を失うと出家して唐へ渡りました。その後、唐から天竺へ向かいました。天竺を向かう途中のマレー半島で亡くなりました。 桓武天皇は新しい都を造りつつ、東北地方へ兵士も送りました。3〜4世紀頃、寒い日が東北地方で何年も続きました。そのため、南の地域と同じような弥生文化の遺跡が少なくなりました。一方、続縄文文化の土器が宮城県・山形県でも見つかっています。また、前方後円墳は岩手県までつくられました。このように東北地方は公民の往来だけでなく、南北の文化も一緒に伝わりました。 律令国家成立後、東北地方などへ朝廷の役人をほとんど送りませんでした。朝廷は東北地方などの公民を「'''蝦夷'''」と呼びました。唐が自国中心に周辺国を低く見つめていたような方法を日本の朝廷も取り入れました。したがって、朝廷の貴族は蝦夷を他民族のように見ていました。 蝦夷の公民は居住地域と時代から暮らし方も集団行動も違いました。東北地方の竪穴住居は東国の集落とそっくりでした。また、古代の「蝦夷(エミシ)」と中世以降の「蝦夷(エゾ)」がどこまで同じなのかも明らかになっていません。居住地域と時代を見ていくと、エミシとエゾが同じ公民なのか違う公民なのかを考えられないからです。 [[ファイル:East gate of Akita Castle 20220409.jpg|サムネイル|220x220ピクセル|秋田城の外郭東門と築地塀]] 朝廷は奈良時代から東北地方に城柵を建てました。城柵に役人と兵士を置いて、東北地方の公民と話し合ったり、税金を集めたり出来るようにしました。こうして、朝廷は少しずつ東北地方を治めました。東北地方太平洋側は多賀城を中心に桃生城などを築きました。東北地方日本海側では秋田城を中心に雄勝城などを築きました。 城柵は政庁・役所・倉庫などで占められ、その周辺を大きな囲いで見えなくしていました。城柵で政治を行ったり、兵士を置いたり、貨物を運んだり保管したりしました。また関東などから農民を柵戸として城柵周辺に移住させて、新しい田畑を増やしました。もし蝦夷が朝廷に従ったら俘囚として、関東以西などへ移住させられました。城柵の役人が蝦夷の公民と話し合ったり争ったりしながら、少しずつ東北地方を治めました。朝廷は東北地方の公民でも「この地域は朝廷の場所」を伝えたいから城柵を建てました。 郡司の'''伊治呰麻呂'''[蝦夷系の地域有力者]は朝廷に従っていました。780年、伊治呰麻呂は我慢の限界から争いを仕掛けました〔伊治呰麻呂の乱(宝亀の乱)〕。伊治呰麻呂は多賀城を攻めて焼き、按察使などを殺しました。伊治呰麻呂の乱(宝亀の乱)から、陸奥・出羽の広い地域で朝廷と蝦夷の争いが始まりました。30年以上から約38年間にわたり、この争いが何度も起こりました。 719年、朝廷は新しい役職の按察使を作りました。複数の国司から1人が按察使にも選ばれて、その人が各役所の業務風景を見に行きました。 桓武天皇は蝦夷の抵抗を武力でおさえ、朝廷の支配を東北へ広げるため何度も大軍を送りました。788年に紀古佐美を征東大使に任命し、789年に大軍を胆沢地方まで進めました。兵士の数は5万人ほどだったともみられています。しかし阿弖流為は自然地形を利用して朝廷軍を迎え撃ち、朝廷軍は大きく敗れました。阿弖流為側は朝廷軍の兵士1000人以上を死傷させています。またこのような大軍を東北まで送り続けるために、大量の食料・武器などが必要でした。関東地方の公民がそれらを用意して運ぶ場合も頻繁にありました。 [[ファイル:Sakanoue Tamuramaro sw-colored.jpg|サムネイル|215x215ピクセル|坂上田村麻呂]] その後の朝廷は軍と武器を揃えました。794年、大伴弟麻呂を征東大使、<span style="color:#f29100">'''坂上田村麻呂'''</span>を副使として東北地方へ大軍を送りました。朝廷の大軍は戦いに勝ちました。勝利の知らせは平安遷都の儀式にも伝えられた。797年、坂上田村麻呂は<span style="color:#f29100">'''征夷大将軍'''</span>になりました。征夷大将軍は律令に書かれていない新しい役職[令外官]になります。 801年、朝廷軍は蝦夷軍と激しい争いになりました。『続日本紀』に「朝廷軍は数多くの蝦夷を殺し、数多くの村を焼いた。」と記されました。また、『日本後紀』に「坂上田村麻呂軍は457人の首を切り、75か所の村を焼いた」と記されています。 802(延暦21)年、坂上田村麻呂は<span style="color:#f29100">'''胆沢城'''</span>を築きました。802年、阿弖流為は500人程度の仲間と一緒に朝廷軍へ降伏しました。その後、裁判のため阿弖流為を平安京へ連れて行きました。この時、坂上田村麻呂は朝廷に「阿弖流為を東北地方へ戻したら、蝦夷の公民も朝廷の命令に今後従うでしょう。」と伝えました。朝廷の公卿は坂上田村麻呂の案を取り下げて、阿弖流為を処刑しました。 阿弖流為の人物史料は、あまり残っていません。現在の文学・舞台芸術は阿弖流為を朝廷の反逆者として扱われています。803年、坂上田村麻呂は志波城を築き、鎮守府も北へ動かしました。朝廷は808年までに鎮守府を'''多賀城'''から胆沢城へ移動しました。朝廷の役人と朝廷軍は北上川上流域[太平洋側]・米代川流域[日本海側]まで進みました。 811年、朝廷は文室綿麻呂を征夷将軍として東北へ送りました。'''志波城'''は雫石川の氾濫問題から使われなくなり、志波城の南に徳丹城[最後の城柵]を築きました。朝廷軍と蝦夷軍の争いは桓武天皇の時代から始まり、文室綿麻呂と蝦夷軍の争いをもっておおむね終わりました。 ただし、東北地方北部の蝦夷は朝廷の命令で揉めました。878年、秋田城下の俘囚は秋田城司の一方的な命令と税金の取り上げに怒って秋田城を焼きました(元慶の乱)。元慶の乱は出羽国司の軍のみで抑えきれませんでした。やがて米代川・八郎潟流域の蝦夷がまとまり、出羽国へ雄物川以北を蝦夷の地域にしたいと伝えました。 朝廷は藤原保則を出羽権守[出羽国の臨時役人]として送りました。藤原保則は鎮守将軍の小野春風とともに、話し合いと武力を使い分けて元慶の乱を終わらせました。藤原保則の伝記へ当時の成果について「敵の津軽から渡島の公民も朝廷に従いました。」と記しました。 26年間、桓武天皇は国家を治めました。貴族の立場を弱体化したいため、左大臣を廃止して政治を立て直そうとしました。奈良時代、地方役人の増加から税金の取り方と仕事の進め方もそれぞれ大きく変わっていました。そこで桓武天皇は地方役人を減らして仕事の引き継ぎを調べたいために各地方の<span style="color:#f29100">'''勘解由使'''</span>を決めました。以前の国司は新しい国司に仕事を引き継いで交代しました。最初、新しい国司は税金の集め方・役所の物品を確かめました。これらを確かめたら、新しい国司は前の国司に解由状を渡しました。勘解由使はこの'''解由状'''のやりとりを厳しく調べました。 当時の日本国と新羅国は仲良く、外国に勝てるような訓練方法を取り入れていませんでした。そのため、自国の兵士も弱体化しました。そこで桓武天皇は陸奥国・出羽国、佐渡国、西海道諸国の軍団兵士を除いて全員首にしました。律令制時代、成人男性[正丁]を3〜4人集め、その中の1人が兵士に選ばれました。兵士になると、軍団内で訓練させていました。農民も兼ねての兵士は大きな労働負担になっていました。その結果、兵士は次第に仕事をさぼり始めました。 朝廷は旧兵士を首にして、納税者の農民に戻しました。郡司の子弟と地主の中から弓と馬と武芸の実技が全て得意な人だけが新しい兵士[<span style="color:#f29100">'''健児'''</span>]になれました。少人数の新しい兵士[健児]は朝廷の施設を見張り、防犯も行いました('''健児の制''')。必要な人数だけ各国に健児を入れました。健児は畿内・東国へ大人数置かれ、現地で60日経つと新しい持ち場へ飛ばされました。このほか、朝廷は健児と同じ警備員・警察官として九州へ1320人[選士]・陸奥国に2000人[健士]を入れました。 また、朝廷は農民の労働時間短縮・出挙利率引き下げ・土地更新頻度削減[一紀一班]などの働き方改革<ref>'''2018年の働き方改革と異なります。あちらの働き方改革は働き方改革関連法[労働基準法・パートタイム労働法・労働契約法・労働者派遣法]の改正となり、政府の法改正になります。'''この働き方改革はあくまでも桓武天皇の農民労働施策見直しの例示として挙げているだけにすぎません。</ref>を行いました。その結果、農民は農業を辞めなくなりました。このように朝廷は古い律令政治を当時の社会に合うように修正していました。 平安京造営工事と蝦夷鎮圧は人件費・建築費を大きく増やしました。平安京移転後も工事は続き、畿内周辺地域・畿内の派遣労働者を造宮職に集めました。朝廷は蝦夷鎮圧のため兵士を送って、物資も現地に送りました。やがて農民の生活は苦しくなり、田畑を捨てました。税金まで朝廷に入らなくなり、国の予算も赤字になりました。 805年、桓武天皇は政治を立て直したいため、国務大臣[参議]の菅野真道と藤原緒嗣の意見を聞きました(徳政相論・徳政論争)。菅野真道の意見は継続案でした。しかし、藤原緒嗣の意見は停止案でした。平安京造営工事[造作]と蝦夷鎮圧[軍事]を今すぐ停止したら、公民の負担まで消えるだろうと桓武天皇に伝えました。 桓武天皇が自分の考えを通すために統治行為論を取り入れていました。その結果、藤原緒嗣の意見を選びました。その後、朝廷は平安京造営工事を縮小して蝦夷鎮圧も諦めました。また、朝廷は造宮職もなくして、当初の計画変更・中止も目立ちました。それでも、平安京は姿を少しずつ変えました。806年、桓武天皇は亡くなりました。 == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] s5ka1ggn45689w8dx46qvly8yowy8cw アイヌ語 代表的な動植物の一覧 0 48920 304559 304497 2026-10-10T14:51:08Z ~2026-54368-88 92764 『M.M. ドブロトヴォールスキィのアイヌ語・ロシア語辞典』 304559 wikitext text/x-wiki [[アイヌ語]] > [[アイヌ語 テーマ別重要語彙|テーマ別重要語彙]] > '''動植物''' 代表的な動植物をアイヌ語で何と言うかを簡単にまとめたものです。非常に数多く存在し、また種類によって大きな方言差があるため、ここでは代表的なものにとどめます。 == 哺乳類 == === ペット・家畜 === 犬…{{lang|ain|seta}} 猫…{{lang|ain|cápe, neko, meko, mekot, me'ekot}} 牛…{{lang|ain|peko}} 豚…{{lang|ain|puta}} 羊…{{lang|ain|menyo, sicuzi}} 馬…{{lang|ain|umma}} {{lang|ain|cóni}}は子馬。 鶏…{{lang|ain|niwatori, niyatori}} === 陸の獲物 === クマ…{{lang|ain|kimunkamuy, iso}} 等 北海道以北にいるのはヒグマ。特に北海道では単に{{lang|ain|kamuy}}といえば熊のことを指し、畏れられると同時に生活にも密接に関わっていたためにこの他にも様々な呼び方がある。 オオカミ…{{lang|ain|horkew}} シカ…{{lang|ain|yuk}} など トナカイ…{{lang|ain|tunahkay}} ウサギ…{{lang|ain|isepo}} ネズミ…{{lang|ain|erum, ermu}} キツネ…{{lang|ain|cironnup}} タヌキ…{{lang|ain|moyuk}} トガリネズミ、モグラ類…{{lang|ain|etucikere(p), (pon)mokociton, konociton}} コウモリ類…{{lang|ain|kapap}} エゾリス…{{lang|ain|tusunike}} シマリス…{{lang|ain|atatnike, ruwop}} 等 モモンガ…{{lang|ain|hat}} イタチ…{{lang|ain|saciri}} テン…{{lang|ain|hoynu, hoinu}} === 水生哺乳類 === アザラシ…{{lang|ain|tokkari}} オットセイ…{{lang|ain|unew}} トド…{{lang|ain|etaspe}} カワウソ…{{lang|ain|esaman}} ラッコ…{{lang|ain|rakko}} == 魚類 == エイ…{{lang|ain|kasumpe, aykotcep}} == 両生類・爬虫類 == トカゲ・カナヘビ…{{lang|ain|(kina)haram, hariyam}} カメ類…{{lang|ain|ecinke}} == 鳥類 == エゾフクロウ…{{lang|ain|isosankekamuy}} 等 スズメ…{{lang|ain|amamecikap}} カッコウ…{{lang|ain|kakkok}} カラス…{{lang|ain|paskur}} == 昆虫などの虫 == バッタ…{{lang|ain|pattaki}} 蜂…{{lang|ain|soya}} == 水生無脊椎動物 == === 貝類 === ヌマガイ…{{lang|ain|pipa}} ホタテ…{{lang|ain|akkketek, askesey}} 等 アワビ…{{lang|ain|aype}} == 樹木 == 立ち木、木材、薪は{{lang|ain|ni}}または{{lang|ain|cikuni}}で総称する。 [[w:シナノキ|シナノキ]]…{{lang|ain|nipesni}} [[w:オヒョウ_(植物)|オヒョウニレ]]…{{lang|ain|atni}} [[w:ハルニレ|ハルニレ]]…{{lang|ain|cikisani}} サクラ…{{lang|ain|karimpani}} 桜の皮は{{lang|ain|karimpa}}。 [[w:カバノキ属|カバノキ]]…{{lang|ain|tatni}} [[w:ウダイカンバ|ウダイカンバ]]の皮…{{lang|ain|sitat}} [[w:シラカンバ|シラカバ]]の皮…{{lang|ain|kitat}} == 草、野菜 == タンポポ…{{lang|ain|honoynoyep}} キャベツ…{{lang|ain|kaypeci}} トリカブト…{{lang|ain|surku}} === 穀物 === コメ、ヒエ、アワ、イナキビなどを総称して{{lang|ain|amam}}という。麦や豆はここには入らない。 コメ…{{lang|ain|amam, siamam, siyamam}} ヒエ…{{lang|ain|amam, piyapa}} 大麦…{{lang|ain|munki}} [[w:エンバク|燕麦]]…{{lang|ain|enpaku}} == サバンナの動物 == ライオン…{{lang|ain|reo}} トラ…{{lang|ain|iwaysaruspe, tunrop}} シマウマ…{{lang|ain|ruoumma}} ゾウ…{{lang|ain|siporoeturacici}} キリン…{{lang|ain|kirimar}} == 参考文献 == 知里真志保『分類アイヌ語辞典 第一巻 植物篇・第二巻 動物篇』平凡社|神奈川大学デジタルアーカイブ - [https://www.i-repository.net/il/meta_pub/G0000723jmpapers_54277 第1巻植物編]・[https://www.i-repository.net/il/meta_pub/G0000723jmpapers_53484 第2巻動物編] [https://ainugo.nam.go.jp/siror/ アイヌと自然デジタル図鑑 — ainugo.nam.go.jp]|分類アイヌ語辞典の内容も検索できる。 [https://ainugo.nam.go.jp/ 国立アイヌ民族博物館アイヌ語アーカイブ — ainugo.nam.go.jp] [https://hdl.handle.net/2115/87707 太田満『和愛辞典:草稿版』] 『M.M. ドブロトヴォールスキィのアイヌ語・ロシア語辞典』共同文化社 [[カテゴリ:アイヌ語]] szi75qgmbn51elfmtlnhzog9r89kl9g コンピュータセキュリティ 0 48948 304564 304522 2026-10-10T18:22:28Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304564 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えばGIMPプラグインを追加する (~/.config/GIMP/*/plug-ins/*)、Blenderアドオンを追加する (~/.config/blender/*/scripts/addons/*) などが考えれます。 == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] atrmrk52ctf5vejvbh74x2y80ig5kl9 304566 304564 2026-10-10T20:34:46Z ~2026-54076-02 92740 304566 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えばGIMPプラグインを追加する (~/.config/GIMP/*/plug-ins/*)、Blenderアドオンを追加する (~/.config/blender/*/scripts/addons/*) などが考えれます。 === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> $ cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> <!--TODO: Windows--> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 439n45shsb0d5yk5v4ne923mzifvruc 304569 304566 2026-10-10T20:52:10Z ~2026-54076-02 92740 /* 改変・追加されたファイルが危険かを調べる */ 304569 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えばGIMPプラグインを追加する (~/.config/GIMP/*/plug-ins/*)、Blenderアドオンを追加する (~/.config/blender/*/scripts/addons/*) などが考えれます。 === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] oerjewgtp6dwne87f76bilg0khsefzv 304570 304569 2026-10-10T21:40:15Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304570 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトのディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour8\scripts\ || ~/Library/Preferences/Ardour8/scripts/ || ~/.config/ardour8/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || colspan=2 | ~/.config/libreoffice/*/user/Scripts/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 3n2c7qexk4jjap8wq2q83tj7w174tan 304571 304570 2026-10-10T21:45:50Z ~2026-54076-02 92740 /* ユーザー領域に不審なファイルが追加されていないかを調べる */ 304571 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトのディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || colspan=2 | ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] s9aa80wfnsaw8j925c1z1ik1xnljdy4 304572 304571 2026-10-10T21:51:17Z ~2026-54076-02 92740 /* ユーザー領域に不審なファイルが追加されていないかを調べる */ 304572 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || colspan=2 | ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] r91190nz8mi8n729bujdtm0djoubqod 304573 304572 2026-10-10T21:53:56Z ~2026-54076-02 92740 /* ユーザー領域に不審なファイルが追加されていないかを調べる */ 304573 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではハードウェアのファームウェアのアップデートも Windows Update 経由で行うことができます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] rpni66prq9c9yp9on976p2j0cghdp5n 304575 304573 2026-10-10T23:10:45Z ~2026-54076-02 92740 304575 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === システム改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 2qtiun90wyqptj9ah8zckjwq7iwb2u4 304577 304575 2026-10-11T00:07:52Z ~2026-54076-02 92740 /* 改変を防ぐ */ 304577 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) にはブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱性のあるブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容の確認は efitools を導入することで可能です (<code>efi-readvar -v db</code>および<code>efi-readvar -v dbx</code>)。 例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ、UEFI Secure Boot --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === メモリ改ざんを防ぐ === PatchGuard / HyperGuard Kernel Patch Protection (KPP) Linux Kernel Runtime Guard == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] q6jedqxfeiygkqlulw66znconmiwn6v 304578 304577 2026-10-11T00:24:18Z ~2026-54076-02 92740 /* 改変を防ぐ */ 304578 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: efitools を導入して<code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> なお例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === Windows には[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard、iOS / macOS には Kernel Integrity Protection (KIP)、Linux には Linux Kernel Runtime Guard(外部パッチ)が用意されています。<!--macOS の Secure Page Table Monitor / Trusted Execution Monitor--> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] lm9gik4b8o5ixt9dmep5ism3xmixa78 304579 304578 2026-10-11T01:23:36Z ~2026-54076-02 92740 /* カーネルメモリ改ざんを防ぐ */ 304579 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: efitools を導入して<code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> なお例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリの一部は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとすると ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが行われていたら CRITICAL_STRUCTURE_CORRUPTION を出します。 <!--macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] knj8odli8gktsizwpbpnx9q6x1ilhdo 304580 304579 2026-10-11T01:38:26Z ~2026-54076-02 92740 /* カーネルメモリ改ざんを防ぐ */ 304580 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: efitools を導入して<code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> なお例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとすると ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます。しかしながら Linux Kernel では kprobes、Static Keys、Static calls、Livepatch などで自己書き換えが多用されているため、text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが行われていたら CRITICAL_STRUCTURE_CORRUPTION を出します。 <!--macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] e7gi1kvee0vyfoh93fugh56jqq05j3g 304581 304580 2026-10-11T01:42:46Z ~2026-54076-02 92740 /* カーネルメモリ改ざんを防ぐ */ 304581 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: efitools を導入して<code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> なお例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 9mfh2ry6zetah8fagli2k540qh9q089 304582 304581 2026-10-11T01:44:20Z ~2026-54076-02 92740 /* カーネルメモリ改ざんを防ぐ */ 304582 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: efitools を導入して<code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> なお例えば Ubuntu には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されています。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込めるページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 19eqh3cuuarl5a9prm0ldc4a0l7x2hi 304584 304582 2026-10-11T03:00:40Z ~2026-54076-02 92740 304584 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.x.xx.xxxx 0:16.y.yy.yyyy 0:16.z.zz.zzzz </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: <!--TODO: 要確認 * Windows: Get-AuthenticodeSignature -FilePath "S:\EFI\Microsoft\Boot\bootmgfw.efi"--> * Linux: <code>sbverify --list</code> 例えば Ubuntu や Debian には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' # grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sbverify --list /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> <!--TODO: TPM (Trusted Platform Module) チップ systemd-boot --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] h27hl18vforej1kmxjhklq52w8g0jtw 304587 304584 2026-10-11T04:16:57Z ~2026-54076-02 92740 304587 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>mountvol S: /S; if ($?) { (Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi').Issuer; mountvol S: /D }</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Ubuntu や Debian には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> <!--TODO: TPM (Trusted Platform Module) チップ systemd-boot --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] pd2bw6jixyj7toz3p2iqr01mk8e434v 304593 304587 2026-10-11T04:53:12Z ~2026-54076-02 92740 304593 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol s: /d } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また例えば Ubuntu や Debian には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderが署名版grubを使っているかを確認 b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> <!--TODO: TPM (Trusted Platform Module) チップ systemd-boot --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] kyugzvqm2zc4yppwia6p1ji0y6ztg9q 304594 304593 2026-10-11T05:03:06Z ~2026-54076-02 92740 304594 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また例えば Ubuntu や Debian には署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderが署名版grubを使っているかを確認 b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> なお Linux には grub の代わりとして使えるブートローダーに systemd-boot があります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されています。 === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 60mwe3se3m3e7b18ngzya2ln0rhmw2o 304597 304594 2026-10-11T05:29:03Z ~2026-54076-02 92740 304597 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。こちらもブートローダーと同様に署名が行われており、その検証をブートローダーが行います。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ zstd -dc /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst > /tmp/msr.ko # zstd圧縮されたカーネルモジュールを解凍する $ /usr/src/linux-headers-$(uname -r)/scripts/extract-module-sig.pl -n /tmp/msr.ko # カーネルモジュールの署名を確認する Read 21033 bytes from module file Found magic number at 21033 Found PKCS#7/CMS encapsulation Found 681 bytes of signature [308202a506092a864886f70d010702a0] No signer's name for PKCS#7 message type sig $ rm /tmp/msr.ko # 後片付け </syntaxhighlight> === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] cq4z4qvxipzg5oca3kf90t8zzowxcrz 304599 304597 2026-10-11T05:30:18Z ~2026-54076-02 92740 304599 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。こちらもブートローダーと同様に署名が行われており、その検証をブートローダーが行います。またカーネルモジュールも署名されており、その検証をカーネルが行います。 例えば Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ zstd -dc /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst > /tmp/msr.ko # zstd圧縮されたカーネルモジュールを解凍する $ /usr/src/linux-headers-$(uname -r)/scripts/extract-module-sig.pl -n /tmp/msr.ko # カーネルモジュールの署名を確認する Read 21033 bytes from module file Found magic number at 21033 Found PKCS#7/CMS encapsulation Found 681 bytes of signature [308202a506092a864886f70d010702a0] No signer's name for PKCS#7 message type sig $ rm /tmp/msr.ko # 後片付け </syntaxhighlight> === システムファイル改ざんを防ぐ === システム改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] f4p9b6m23mfsqv89hwrtg7czzetsnaw 304602 304599 2026-10-11T06:08:05Z ~2026-54076-02 92740 304602 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行うことができます。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: <!--* Windows: --> * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> 例えば Ubuntu では以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ zstd -dc /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst > /tmp/msr.ko # zstd圧縮されたカーネルモジュールを解凍する $ /usr/src/linux-headers-$(uname -r)/scripts/extract-module-sig.pl -n /tmp/msr.ko # カーネルモジュールの署名を確認する Read 21033 bytes from module file Found magic number at 21033 Found PKCS#7/CMS encapsulation Found 681 bytes of signature [308202a506092a864886f70d010702a0] No signer's name for PKCS#7 message type sig $ rm /tmp/msr.ko # 後片付け </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 9c838k7nnmbvpa9b6c7lmacd6jesyl6 304604 304602 2026-10-11T06:27:37Z ~2026-54076-02 92740 304604 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。 カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: <!--* Windows: --> * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て'''Tainted kernel'''扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。 <syntaxhighlight lang="shell-session"> $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また例えば Ubuntu では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] fx2zo5cuxgqsbmd1cxru7dv9ots44w8 304611 304604 2026-10-11T07:28:06Z ~2026-54076-02 92740 304611 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認するスクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。 <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] dvf5tupph5mwzjx31fj6oe4sy7nveoj 304612 304611 2026-10-11T07:31:42Z ~2026-54076-02 92740 304612 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] qw4s8m6z966yhth04bntzcfxt9q2c3y 304613 304612 2026-10-11T08:11:25Z ~2026-54076-02 92740 304613 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ 代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/コマンド !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準 || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準 || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Roaming\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 0kc82r23izxwh560rs4lvz5lwe8unzt 304614 304613 2026-10-11T08:37:05Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304614 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |} {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリファイル |- ! 規格/アプリケーション !! 現ユーザー !! 全ユーザー |- | Windows || HKEY_CURRENT_USER\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] ggx1pecix7hfwkmxja4isr7ui2w98fa 304618 304614 2026-10-11T09:12:00Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304618 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリファイル |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>* || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 82t65dqdckth21u7tfl7j7fvrexwtmi 304619 304618 2026-10-11T09:45:43Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304619 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]] || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]] || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | Microsoft Edge || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | Google Chrome || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | [[:w:Compiz|Compiz]] || org.compiz.integrated command-*{{efn|<code>gsettings list-recursively org.compiz.integrated</code>で全てを表示可能.。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] q4w6ozp335w1mmjl9vqsxdgeq8u8r5r 304620 304619 2026-10-11T10:01:49Z ~2026-54076-02 92740 /* 設定データベースを検証する */ 304620 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]] || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]] || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | Marco ([[w:MATE (デスクトップ環境)|MATE]]) || org.mate.Marco.keybinding-commands command-*{{efn|<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で全てを表示可能。}} |- | MATE Screensaver || org.mate.screensaver embedded-keyboard-command / logout-command{{efn|<code>gsettings list-recursively org.mate.screensaver</code>で全てを表示可能}} |- | [[:w:Compiz|Compiz]] || org.compiz.integrated command-*{{efn|<code>gsettings list-recursively org.compiz.integrated</code>で全てを表示可能。}} |} なおMATEと同源の GNOME Screensaver にも org.gnome.desktop.screensaver embedded-keyboard-command / logout-command{{efn|<code>gsettings list-recursively org.gnome.desktop.screensaver</code>で全てを表示可能。}} が存在するものの、こちらは既に廃止されており指定しても無視されるとされる<ref>[https://gitlab.gnome.org/GNOME/gsettings-desktop-schemas/-/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in schemas/org.gnome.desktop.screensaver.gschema.xml.in · main · GNOME / gsettings-desktop-schemas · GitLab] GNOME Project</ref>。 === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] nus5ig88fscwp4orflhjlrtnbdeehai 304621 304620 2026-10-11T10:42:24Z ~2026-54076-02 92740 304621 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]] || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]] || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} Linux の GNOME / MATE 環境ではスキーマなしが<code>dconf dump</code>('/'区切り)で、スキーマありが <code>gsettings list-recursively</code>('.'区切り)で表示できる。 {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command |- | Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}} |- | MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}} |- | mate-applets || /org/mate/panel/objects/object-*/prefs/command |- | mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command |} なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在するものの、こちらは既に廃止されており指定しても無視されるとされる<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。 === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] ofhgri1vqf9mujmrvkh66yx8l9iguwc 304622 304621 2026-10-11T10:48:09Z ~2026-54076-02 92740 /* 不審な改変が行われていないかを調べる */ 304622 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} Linux の GNOME / MATE 環境ではスキーマなしが<code>dconf dump</code>('/'区切り)で、スキーマありが <code>gsettings list-recursively</code>('.'区切り)で表示できる。 {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command |- | Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}} |- | MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}} |- | mate-applets || /org/mate/panel/objects/object-*/prefs/command |- | mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command |} なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在するものの、こちらは既に廃止されており指定しても無視されるとされる<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。 == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] ecodrtku7x5n2vrg5hby6iu0sbo43d0 304623 304622 2026-10-11T10:54:01Z ~2026-54076-02 92740 /* 設定データベースを検証する */ 304623 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマを被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。 {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command |- | Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}} |- | MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}} |- | mate-applets || /org/mate/panel/objects/object-*/prefs/command |- | mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command |} なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。 == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] 7tigsd6uxbsnvndetaisrq85ajphewf 304627 304623 2026-10-11T11:51:49Z ~2026-54076-02 92740 304627 wikitext text/x-wiki '''コンピュータセキュリティ'''はコンピュータの安全のことです。ここではコンピュータの安全を確保することを学びます。 == コンピュータセキュリティの基本 == コンピュータは弱いところから狙われるため、弱いところを無くすのがセキュリティの基本となります。 具体例を挙げましょう。一般的な光回線に繋がれてるホームネットワークを考えます。ここには光回線の先に繋がる上位ネットワークと家内のホームネットワーク (家庭におけるLAN) とを区切るエッジルーター(一般的にはハードウェア・ゲートウェイがこれに該当)が存在します。このホームネットワークに数台の新しいWindows PCと一台の古い機器が繋がっていると仮定します。 新しいWindows PC同士ではホームネットワーク経由でファイルをやり取りするためにファイルの共有 (SMB{{efn|Server Message Block}}) を有効にしているとします。一方、古い機器の方を脆弱性のある古いテレビとしましょう。このテレビはインターネットから繋いで地上デジタル放送を見るための DCTP+ {{efn|Digital Transmission Content Protection +}}が搭載されており、UPnP{{efn|Universal Plug and Play}}で自動的にエッジルーター搭載のファイアーウォールに穴あけてインターネット側から DCTP+ に繋がるようになっているものとします。 この仮定によってハッカーは DCTP+ の脆弱性を使って古いテレビに悪意のあるプログラムを実行させてファイルの共有サーバーを立て{{efn|Windows 11時点でもゲスト認証による接続は許可されている<ref>[https://learn.microsoft.com/en-us/windows-server/storage/file-server/smb-interception-defense?tabs=group-policy Protect SMB traffic from interception] Microsoft</ref>。}}、そこからファイルの共有を通じて新しいWindows PCにマルウェア (例えば<code>PHOTO-<ランダムな数字>.png.lnk</code><ref>[https://www.microsoft.com/en-us/security/blog/2026/06/25/photo-zip-campaign-targeting-hospitality-industry-delivers-node-js-implant-persistent-access/ Photo ZIP campaign targeting hospitality industry delivers Node.js implant for persistent access] Microsoft 2026年6月25日</ref>) を送り込むことが可能となりました。 == 既製製品の脆弱性を塞ぐ == まずは弱いところを無くしましょう。 === ソフトウェアアップデートをする === セキュリティの基本はソフトウェアアップデートです。 ==== PCおよびモバイル ==== PC{{efn|PCサーバを含む}}やモバイルでは基本的に自動で通知が来るので忘れずにアップデートを選択しましょう。手動では以下のように行います: ; Windows : システムのアップデートは基本的に [[:w:Microsoft Update|Microsoft Update]] (Windows Update) で、アプリケーションのアップデートは基本的に<code>winget upgrade</code>コマンドで行います。 : また Windows 11 Enterprise では再起動が不要なホットパッチにも対応しています。 ; macOS / iOS : 「ソフトウェアアップデート」 ; Ubuntu / Debian : [[:w:APT|APT]]パッケージ管理システムでは<code>apt upgrade</code>コマンドで更新を行います。 : Ubuntu では GUI による更新用として[[:w:Software Updater|Software Updater]] (<code>update-manager</code>コマンド)、[[:w:Snap (ソフトウェア)|Snap]]パッケージの更新コマンドとして<code>snap refresh</code>、メジャーバージョンの更新コマンドとして<code>do-release-upgrade</code>も存在します。 : また Ubuntu では Ubuntu Pro に登録することで再起動が不要なカーネル修正の Livepatch も可能となります(個人では5台まで無料)。 ; RedHat / Fedora : <code>yum update</code>コマンド ; Android : 「設定」アプリ→「システム」→「システムアップデート」または「ソフトウェアアップデート」 また個々のハードウェアのファームウェアアップデートは以下で行います: ; Linux : Linuxにおけるファームウェアの更新は基本的に<code>fwupdmgr update</code>コマンドで行います。 : NVMe SSDのファームウェアの更新は<code>nvme fw-download</code>コマンドおよび<code>nvme fw-commit</code>コマンドで行うことができます。 一方、Windows ではファームウェアのアップデートも Windows Update 経由で<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/bringup/firmware-update ファームウェアの更新] Microsoft</ref>、macOS ではファームウェアのアップデートもmacOSアップデートで行うことができます<ref>[https://support.apple.com/ja-jp/guide/mac-help/mchlp2609/mac Macのファームウェアアップデートの入手方法] Apple</ref>。 <!-- また開発環境では以下も存在します: ; Python : <code>pip -U install</code> --> ==== ルーター ==== ルーターでは以下の設定を有効のままにしておきましょう: ; AirStationシリーズ(Buffalo 製ルーター) : 「ファームウェア自動更新機能」 ; Atermシリーズ(NEC 製ルーター) : 「メンテナンスバージョンアップ機能」「時刻指定バージョンアップ機能」 ==== テレビ ==== テレビでは放送波アップデートが行われるため、「放送波による自動更新」<!--TODO: メーカー別名-->を有効にしましょう。 === 代替ソフトウェアを探す === 更新が停止された古いソフトウェアの多くはそれ自身に脆弱性が存在したり、脆弱性のある古いライブラリに依存していたりします。そのため古いソフトウェアは速やかに代替ソフトウェアへと移行しましょう。 ==== 開発終了したソフトウェアから現役のソフトウェアへ ==== 古いソフトウェアの例には例えば以下があります: * 画像ビューア ** [[:w:Susie|Susie]] (〜2013年) ** [[:w:en:FastPictureViewer|FastPictureViewer]](〜2021年) * メディアフィルター(代替候補: LAV Filters) ** [[:w:ffdshow|ffdshow]](〜2014年) ** [[:w:Haali Media Splitter|Haali Media Splitter]](〜2013年) * メディアセンター(代替候補: Kodi) ** [[:w:en:Boxee|Boxee]](〜2011年) ** [[:w:Kodi|XBMC]](〜2014年) - Kodiの前身 * 圧縮ソフトウェア ** [[:w:+Lhaca|+Lhaca]](〜2007年) ** [[:w:Lhaplus|Lhaplus]](〜2017年) ==== 古いバージョンのライブラリを避ける ==== 多くのソフトウェアに使用されているライブラリとその過去の危険な脆弱性には例えば以下があります:<!--危険を認識させる。例はライブラリ内のメイン処理に存在し、任意コード実行であり、脆弱性の存在期間が長く、新しいものが好ましい。--> * 画像ライブラリ ** libpng - [https://access.redhat.com/security/cve/cve-2010-1205 CVE-2010-1205](PNG画像で任意コード実行の可能性) ** libjpeg-turbo - [https://access.redhat.com/security/cve/cve-2012-2806 CVE-2012-2806](JPEG画像で任意コード実行の可能性) ** OpenJPEG - [https://access.redhat.com/security/cve/cve-2025-54874 CVE-2025-54874](JPEG2000画像で任意コード実行の可能性) ** libtiff - [https://access.redhat.com/security/cve/cve-2026-12912 CVE-2026-12912](PixarLog圧縮TIFF画像で任意コード実行の可能性) ** libwebp - [https://access.redhat.com/security/cve/cve-2023-4863 CVE-2023-4863](WebP画像で任意コード実行の可能性) * 動画ライブラリ ** FFmpeg - [https://access.redhat.com/security/cve/cve-2024-22860 CVE-2024-22860](JPEG XLアニメーションで任意コード実行の可能性) * 圧縮ライブラリ ** libarchive - [https://access.redhat.com/security/cve/cve-2026-15028 CVE-2026-15028](tarアーカイブ形式で任意コード実行の可能性) ** zlib - [https://access.redhat.com/security/cve/cve-2002-0059 CVE-2002-0059](Deflate圧縮形式で任意コード実行の可能性) ** bzip2 - [https://access.redhat.com/security/cve/cve-2010-0405 CVE-2010-0405](BZ2圧縮形式で任意コード実行の可能性) これらのライブラリはABI(アプリケーションバイナリインターフェイス)が変更されて新しいバージョンの共有ライブラリにドロップイン置換できないものも多くなっています。 また国内で使われている古いソフトウェアでは開発中止になった以下のライブラリも問題となっています: * UNLHA32.DLL<ref>[https://forest.watch.impress.co.jp/docs/news/372729.html 圧縮・解凍用DLL「UNLHA32.DLL」が開発中止、作者はLZHの利用中止を呼びかけ] Impress 2010年6月7日</ref> Webフレームワークでは開発中止となった以下のフレームワークが問題となっています: * [[:w:Model View Controller|Model View Controller]]フレームワーク(代替候補: [[:w:Apache Struts|Apache Struts]] 2、[[:w:Spring Framework#Model-View-Controller フレームワーク|Spring MVC]]) ** [[:w:en:Apache Struts 1|Apache Struts 1]](〜2008年) - Java言語 * [[:w:アスペクト指向プログラミング|アスペクト指向フレームワーク]](代替候補: [[:w:Spring Framework|Spring Framework]]、[[:w:en:Micronaut (framework)|Micronaut]]) ** [[:w:Seasar|Seasar]](〜2016年) - Java言語 * [[:w:シングルページアプリケーション|シングルページアプリケーション]]フレームワーク(代替候補: [[:w:Angular|Angular]]、[[:w:Vue.js|Vue.js]]) ** [[:w:AngularJS|AngularJS]](〜2022年) - JavaScript ==== メモリ安全性の高いソフトウェアへ ==== 既存のソフトウェアの脆弱性は7割がメモリ安全性の問題に起因すると言われています<ref>[https://www.cisa.gov/sites/default/files/2023-12/CSAC_TAC_Recommendations-Memory-Safety_Final_20231205_508.pdf REPORT TO THE CISA DIRECTOR Technical Advisory Council Memory Safety] サイバーセキュリティ諮問委員会 (CSAC) 2023年12月5日</ref>。しかしながら[[C言語]]や[[C++]]はメモリ安全性が低いため、メモリ安全性の確保できる[[Rust]]などで書かれた代替プログラムが登場しています: {| class="wikitable" |+ コマンドのRust版 |- ! コマンドの概要 !! 従来版 !! Rust版 |- | Unix系の基本コマンド群 || GNU Core Utilities || '''uutils coreutils''' |- | ファイル検索コマンド群{{efn|<code>find</code>、<code>locate</code>、<code>updatedb</code>、<code>xargs</code>の4コマンド}} || GNU Findutils || '''uutils findutils''' |- | ファイル差分コマンド群{{efn|<code>diff</code>、<code>cmp</code>、<code>diff3</code>、<code>sdiff</code>の4コマンド}} || GNU Diffutils || '''uutils diffutils''' |- | ストリームエディタ (sed) || GNU sed / FreeBSD sed || '''uutils sed''' |- | AWKスクリプト || GNU AWK || '''uutils AWK''' |- | 文字列検索 || GNU Grep || '''uutils Grep''' |- | tarアーカイブ || GNU Tar || '''uutils tar''' |- | アカウント管理コマンド群 || shadow-utils || '''uutils shadow-utils''' |- | アクセス制御コマンド群{{efn|<code>chacl</code>、<code>getfacl</code>、<code>setfacl</code>の3コマンド}} || acl || '''uutils acl''' |- | procfs{{efn|プロセスファイルシステム}}表示コマンド群 || procps / procps-ng || '''uutils procps''' |- | ホスト名管理コマンド群{{efn|<code>hostname</code>、<code>dnsdomainname</code>、<code>domainname</code>、<code>nisdomainname</code>、<code>ypdomainname</code>の5コマンド。}} || hostname || '''uutils hostname''' |- | Linuxユーティリティ || util-linux || '''uutils util-linux''' |- | 権限昇格 || sudo || '''sudo-rs''' |- | 時刻同期 || ntpd || '''ntpd-rs''' |- | セキュアシェル (SSH) || OpenSSH || '''russh''' |} これらのRustで書かれたコマンドのうちuutils coreutilsとsudo-rsはUbuntuに採用されています。 またライブラリでもRustだけ (Pure Rust) で実装されたものが登場しています: * 画像ライブラリ - これらは例えばGNOMEデスクトップ環境の画像ローダーGlycinから使われています<ref>[https://gitlab.gnome.org/GNOME/glycin GNOME / glycin · GitLab] GNOME Project</ref>。 ** libpng → pngクレート - PNG画像向け。 ** libjpeg / libjpeg-turbo → zune-jpeg / libjpeg-turbo-rs - JPEG画像向け。 ** OpenJPEG → hayro-jpeg2000 - JPEG 2000画像向け。 ** libtiff → tiffクレート - Tiff画像向け ** libwebp → image-webpクレート - WebP画像向け。 ** libraw → libopenraw - RAW画像向け。 ** librsvg - SVG画像向け。C言語からRustに書き直しされました。 * 圧縮ライブラリ ** zlib / zlib-ng → zlib-rs - Deflate圧縮向け ** libbzip2 → bzip2-rs - BZ2圧縮向け * 暗号化ライブラリ ** OpenSSL / GnuTLS → [[:w:en:Rustls|Rustls]] * Unicode処理ライブラリ ** ICU4C → ICU4X * テキスト整形ライブラリ ** HarfBuzz → HarfRust === 古いハードウェアに対処する === サポート切れの OS を搭載したハードウェアはどうすれば良いでしょうか。これにはいくつかの方法があります。 ==== スタンドアロン運用 ==== 古いハードウェアはインターネットに繋がずに使用すること(スタンドアロン運用)も可能です。 しかしながらUSBメモリでデータをやり取りする場合はUSBメモリ経由での感染などのリスクは残ります。 ==== 新しめのLinuxを導入 ==== 新しめのLinuxを導入するという方法もあります。 これに適したものでは例えばWindows 11非対応のPC (Intel 第7世代以前、AMD Ryzen 1000シリーズ以前) が挙げられます。 またスマートフォンやタブレットであればカスタムROMが、ルーターであればDD-WRTやOpenWRTが存在します。 ==== 手放す ==== 手に負えなければデータだけバックアップして手放しましょう。 == 不審な改変が行われていないかを調べる == {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | Windows || %APPDATA%\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* || C:\<wbr>ProgramData\<wbr>Microsoft\<wbr>Windows\<wbr>Start Menu\<wbr>Programs\<wbr>Startup\<wbr>* |- | [[:w:PowerShell|PowerShell]] プロファイル<ref>[https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.core/about/about_profiles?view=powershell-7.6 about_Profiles - PowerShell - Microsoft Learn] Microsoft</ref> || %USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Profile.ps1<br>%USERPROFILE%\<wbr>Documents\<wbr>PowerShell\<wbr>Microsoft.PowerShell_profile.ps1 || C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Profile.ps1<br>C:\<wbr>Windows\<wbr>System32\<wbr>WindowsPowerShell\<wbr>*\<wbr>Microsoft.PowerShell_profile.ps1 |} {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能な設定ファイル |- ! 規格/アプリケーション !! ユーザー !! システム |- | POSIX標準 || ~/.profile || /etc/profile |- | XDG Base Directory<wbr>標準 || ~/.local/bin/* || |- | FHS{{efn|Filesystem Hierarchy Standard}}<wbr>標準[https://refspecs.linuxfoundation.org/fhs.shtml] || || /bin/* /sbin/* /usr/bin/* /usr/local/bin/* /etc/inittab |- | LSB{{efn|Linux Standard Base}}<wbr>標準[https://refspecs.linuxfoundation.org/lsb.shtml] || || /etc/profile.d/* /etc/init.d/* /etc/cron.d/* |- | Desktop Application Autostart Specification<wbr>標準[https://specifications.freedesktop.org/autostart/latest/] || ~/.config/autostart/* /media/*/*/.autorun /media/*/*/autorun /media/*/*/autorun.sh /run/media/*/*/.autorun /run/media/*/*/autorun /run/media/*/*/autorun.sh || /etc/xdg/autostart/* |- | Bash || ~/.bash_profile ~/.bashrc || /etc/bash_profile /etc/bash.bashrc /etc/bash.bash_logout |- | Z shell (Zsh) || ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin ~/.zlogout || /etc/zshenv /etc/zprofile /etc/zshrc /etc/zlogin /etc/zlogout<br/>(または /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin /etc/zsh/zlogout) |- | Systemd || ~/.config/systemd/user/* || /etc/systemd/system/* /etc/systemd/user/* |- | Xorg || ~/.xinitrc ~/.xserverrc ~/.xsession || /etc/X11/xinit/xinitrc /etc/X11/xinit/xserverrc /etc/X11/Xsession /usr/share/xsessions/* |- | Wayland || || /usr/share/wayland-sessions/* |- | Python || ~/.local/lib/python*/site-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getusersitepackages())'</code>で確認可能。}} || /usr/lib/python*/dist-packages/*/** /usr/local/lib/python*/dist-packages/*/**{{efn|絶対パスは<code>python3 -c 'import site; print(site.getsitepackages())'</code>で確認可能。}} |- | Perl{{efn|Debian/UbuntuではDebianパッケージ設定システム (debconf) のためにPerlを使用している。}} || || /usr/share/perl*/** /usr/local/share/perl*/** /usr/lib/*/perl*/** /usr/local/lib/*/perl*/**{{efn|絶対パスは<code>perl -V:installsitearch -V:installsitelib -V:installvendorarch -V:installvendorlib -V:archlib -V:privlib -V:installarchlib -V:installprivlib</code>で確認可能。}} |} === パッケージ管理ファイルを検証する === パッケージ管理システムが管理しているファイルではファイルハッシュが保存されているため簡単にその検証を行うことが可能です: * Windows: <code>sfc /scannow</code> * Debian/Ububntu(Debパッケージ): <code>debsums -s</code> * RedHat/Fedora(RPMパッケージ): <code>rpm -Va</code> ただしローカルハッシュが改ざんされている可能性もあるため過信はできません。<!--TODO: ローカルハッシュの検証法--> 自動的にシステムの検証を行うシステムも存在します: * Android - ブロックデバイスレベルでのハッシュ検証 (dm-verityベース)<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref> <!-- またUbuntuのSnapパッケージでもdm-verityの導入が進められています。 また特定言語のパッケージの検証は以下で可能です: * PIP (Python): なし --> === システム領域に不審なファイルが追加されていないかを調べる === システムの追加ファイルの検知にはパッケージシステムで管理されていないファイルの一覧を返す以下のようなツールが存在します: * Debian / Ubuntu(Debパッケージ)向け: cruft-ngパッケージ(<code>cruft</code>コマンド) 上記の<code>cruft</code>コマンドでは設定ファイルだけ残っているパッケージのファイルも出てきてしまいます。そのため、これが邪魔な時は設定ファイルだけ残っているパッケージを<code>sudo apt purge '~c'</code>で削除しましょう。 === ユーザー領域に不審なファイルが追加されていないかを調べる === ユーザースクリプトの書き換えや追加は検知が難しいです。<!--TODO: 良い方法を書く--> 共有ライブラリやスクリプトによるプラグイン追加も可能となっているため、こちらにも気をつけなければいけません。これには例えば以下があります: {| class="wikitable" |+ 代表的なユーザースクリプトや拡張機能のディレクトリパス |- ! 種類 !! Windowsのパス !! macOSのパス !! Linuxのパス |- | Google Chrome 拡張機能 || %LOCALAPPDATA%\Google\Chrome\User Data\*\Extensions\ || ~/Library/Application Support/Google/Chrome/*/Extensions/ || ~/.config/google-chrome/*/Extensions/ |- | GIMPプラグイン<ref>[https://gimp.cc/faq/add-gimp-plugins.html How to Install GIMP Plugins - Detailed Guide with Troubleshooting] GIMP.cc</ref> || %APPDATA%\GIMP\*\plug-ins\ || ~/Library/Application Support/GIMP/*/plug-ins/ || ~/.config/GIMP/*/plug-ins/ |- | Blenderスクリプト{{efn|起動スクリプト、アドオンを含む。}}<ref>[https://docs.blender.org/manual/ja/dev/advanced/blender_directory_layout.html Blender&#39;s Directory Layout] Blender Foundation</ref> || %APPDATA%\Blender Foundation\Blender\*\scripts\ || ~/Library/Application Support/Blender/*/scripts/ || ~/.config/blender/*/scripts/ |- | Ardourスクリプト<ref>[https://manual.ardour.org/lua-scripting/ The Ardour Manual - Lua Scripting] Ardour</ref> || %LOCALAPPDATA%\ardour*\scripts\ || ~/Library/Preferences/Ardour*/scripts/ || ~/.config/ardour*/scripts/ |- | LibreOfficeスクリプト || %APPDATA%\LibreOffice\*\user\Scripts\ || ~/Library/Application Support/LibreOffice/*/user/Scripts/ || ~/.config/libreoffice/*/user/Scripts/ |- | Visual Studio Code 拡張機能<ref>[https://code.visualstudio.com/docs/configure/extensions/extension-marketplace Extension Marketplace] Microsoft</ref> || %USERPROFILE%\.vscode\extensions\ || ~/.vscode/extensions/ || ~/.vscode/extensions/ |} === 改変・追加されたファイルが危険かを調べる === 実行ファイルやスクリプトはLinuxでは以下で検出できます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs file | grep -i -E ':.*(executable|shared object|relocatable|script)' /etc/init.d/binfmt-support.dpkg-new: POSIX shell script, ASCII text executable /etc/update-motd.d/99-livepatch-kernel-upgrade-required: POSIX shell script, ASCII text executable /usr/lib/chromium-browser/plugins/libpepflashplayer.so: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5c421e89a5c062a2106a5a4381dc38e779a22795, stripped </syntaxhighlight> またClamAVを導入していれば以下でマルウェアデータベースとの照合を行うことができます: <syntaxhighlight lang="shell-session"> # cat filelist.txt | xargs clamscan Loading: 3s, ETA: 0s [========================>] 3.63M/3.63M sigs Compiling: 1s, ETA: 0s [========================>] 41/41 tasks /etc/apt/apt.conf.d/00trustcdrom: OK /etc/apt/auth.conf.d/90ubuntu-advantage: OK /etc/apt/keyrings/google.asc: OK [...] ----------- SCAN SUMMARY ----------- Known viruses: 3628164 Engine version: 1.5.4 Scanned directories: 125 Scanned files: 1919 Infected files: 0 Total errors: 10 Data scanned: 247.72 MiB Data read: 281.17 MiB (ratio 0.88:1) Time: 17.939 sec (0 m 17 s) Start Date: 2026:10:11 05:41:30 End Date: 2026:10:11 05:41:48 </syntaxhighlight> === 設定データベースを検証する === 設定データベースは Windows ではレジストリ、Linuxでは GNOME / MATEの 使う [[:en:dconf|dconf]] が存在します。 Windows の設定データベースはレジストリと呼び「レジストリエディタ」 (<code>regedit</code>) で表示できます。 {| class="wikitable" |+ Windows における代表的なユーザースクリプト又はコマンド起動が可能なレジストリ |- ! 規格/アプリケーション !! 各ユーザー !! 全ユーザー |- | Windows || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"|RunOnceは一度のみ実行だが再登録することで何回でも実行可能。}} || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>Run\<wbr>*<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows\<wbr>CurrentVersion\<wbr>RunOnce\<wbr>*{{efn|name="runonce"}} |- | [[:w:en:Active Setup|Active Setup]]<ref>[https://www.advancedinstaller.com/application-packaging-training/msi/ebook/active-setup.html Active-Setup Mechanism] Advanced Installer</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Active Setup\<wbr>Installed Components\<wbr>*\<wbr>StubPath |- | [[:w:Windowsサービス|Windowsサービス]]<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/install/hklm-system-currentcontrolset-services-registry-tree HKLM\SYSTEM\CurrentControlSet\Services レジストリ ツリー - Windows drivers - Microsoft Learn] Microsoft</ref> || || HKEY_LOCAL_MACHINE\<wbr>SYSTEM\<wbr>CurrentControlSet\<wbr>services\<wbr>* |- | [[:w:Winlogon|Winlogon]].exe || || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Shell<br>HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Windows NT\<wbr>CurrentVersion\<wbr>Winlogon\<wbr>Userinit |- | [[:w:cmd.exe|cmd.exe]]<ref>[https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/cmd cmd - Microsoft Learn] Microsoft</ref> || HKEY_USERS\<wbr>*\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\REG_EXPAND_SZ || HKEY_LOCAL_MACHINE\<wbr>Software\<wbr>Microsoft\<wbr>Command Processor\<wbr>AutoRun\<wbr>REG_SZ |- | [[Microsoft Edge]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Microsoft\<wbr>Edge\<wbr>ExtensionInstallForcelist<ref>[https://learn.microsoft.com/ja-jp/deployedge/microsoft-edge-policies/extensioninstallforcelist Microsoft Edge ブラウザー ポリシードキュメント ExtensionInstallForcelist - Microsoft Learn] Microsoft</ref>{{efn|name="silent-install"|自動的にサイレントインストールする}} |- | [[Google Chrome]] || || HKEY_LOCAL_MACHINE\<wbr>SOFTWARE\<wbr>Policies\<wbr>Google\<wbr>Chrome\<wbr>ExtensionInstallForcelist<ref>[https://chromeenterprise.google/intl/ja_jp/policies/extension-install-forcelist/ ExtensionInstallForcelist: 自動インストールするアプリと拡張機能のリストの設定 - Chrome Enterprise] Google</ref>{{efn|name="silent-install"}} |} Linux の GNOME / MATE 環境には「[[:w:en:Dconf#dconf database|dconf データベース]]」が存在し、それは<code>dconf dump</code>('/'区切り)で表示できます。また dconf データベースにスキーマ(規定値と解説)を被せた gsettings も存在し、こちらは<code>gsettings list-recursively</code>(dconfと異なり'.'区切り)で表示できます。 {| class="wikitable" |+ Linux における代表的なユーザースクリプト又はコマンド起動が可能なdconf設定 |- ! 規格/アプリケーション !! ユーザー |- | GNOME Settings Daemon || /org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom*/command |- | Marco ([[w:MATE (デスクトップ環境)|MATE]]) || /org/mate/Marco/keybinding-commands/command-*{{efn|変更した設定は<code>dconf dump /org/mate/Marco/keybinding-commands/</code>で、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.Marco.keybinding-commands</code>で表示可能。}} |- | MATE Screensaver || /org/mate/screensaver/embedded-keyboard-command<br>/org/mate/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/mate/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.mate.screensaver</code> で表示可能}} |- | mate-applets || /org/mate/panel/objects/object-*/prefs/command |- | mate-sensors-applet || /org/mate/panel/objects/object-*/prefs/*/high-alarm-command<br>/org/mate/panel/objects/object-*/prefs/*/low-alarm-command |} なお MATE Screensaver と同源の GNOME Screensaver にも /org/gnome/desktop/screensaver/embedded-keyboard-command と /org/gnome/desktop/screensaver/logout-command{{efn|変更した設定は<code>dconf dump /org/gnome/desktop/screensaver/</code>、デフォルトも含めた設定は<code>gsettings list-recursively org.gnome.desktop.screensaver</code> で表示可能。}} が存在しますが、こちらは既に廃止されており指定しても無視されます<ref>[https://github.com/GNOME/gsettings-desktop-schemas/blob/main/schemas/org.gnome.desktop.screensaver.gschema.xml.in gsettings-desktop-schemas/schemas/org.gnome.desktop.screensaver.gschema.xml.in at main · GNOME/gsettings-desktop-schemas] GNOME Project</ref>。 == 改変を防ぐ == 改変を探すのは大変です。なので最初から改変をできないようにすれば管理はとても楽になります。 改ざんを防ぐには「[[:w:en:Chain of trust|信頼の連鎖]]」 (chain of trust) が重要となります。例えばカーネルだけで改ざんを防いでも、ハードウェアのファームウェアが不正であれば不正なカーネルを起動できてしまいます。 === ファームウェア改ざんを防ぐ === ファームウェア改ざんによる「ファームウェアルートキット」を防ぐにはIntel Management Engine (Intel ME)で実装されているIntel BIOS Guardを使う必要があります。<!--TODO: マザーボードによってはBIOSで有効にする必要があります。→最近のマザーボード事情--> なお2017年の第8世代Intel Coreプロセッサ (Coffee Lake) 以前はme_cleanerによってIntel Management Engineの無効化が可能<ref>[https://github.com/corna/me_cleaner/wiki/me_cleaner-status me_cleaner status] Nicola Corna 2018年</ref>なため非推奨です。 また2023年のIntel ME 16.1.30.2307未満では悪意あるロゴ画像を設定することによってroot権限からUEFI設定の変更が可能です([[:w:en:LogoFAIL|LogoFAIL]]の脆弱性)。そのため、古いIntel Management Engineが動作している場合はそのファームウェアをアップデートしましょう。Windowsでは MEUpdateTool.exe / FWUpdLcl.exe を使うことでこのアップデートが可能となっています。一方、Linuxでは一部機種が fwupdmgr 経由での Intel ME ファームウェアアップデートに対応しています。 Intel MEのバージョンはLinuxでは以下のような感じに調べることができます: <syntaxhighlight lang="shell-session"> $ cat /sys/class/mei/mei0/fw_ver 0:16.1.32.2473 0:16.1.32.2473 0:16.1.27.2181 </syntaxhighlight> === ブートローダー改ざんを防ぐ === ブートローダーは起動に使われるファームウェア (BIOS) から呼ばれ、カーネルを読み込んで起動するために使われるプログラムです。古い BIOS (レガシーBIOS) には起動するブートローダーを検証する仕組みが存在しませんでしたが、新しい UEFI (統一拡張ファームウェアインターフェース) には署名されたブートローダーのみを起動する UEFI Secure Boot が追加され、安全なブートローダーの起動を許可するための「承認済み署名データベース」 (Authorized Signature Database、UEFI db) と、脆弱なブートローダーの起動を防ぐための「禁止署名データベース」 (Forbidden Signature Database、UEFI dbx) が用意されています。 UEFI Secure Boot が有効かどうかは以下で確認できます: * Windows PowerShell: <code>Confirm-SecureBootUEFI</code> * Linux: <code>mokutil --sb-state</code> UEFI db と UEFI dbx の内容は以下で確認できます: * Windows PowerShell: <code>Get-SecureBootUEFI -Name db -Decoded</code> / <code>Get-SecureBootUEFI -Name dbx -Decoded</code> * Linux: ** mokutil{{efn|Ubuntu Desktop に標準で含まれている。}}: <code>mokutil --db</code> / <code>mokutil --dbx</code> ** efitools: <code>efi-readvar -v db</code> / <code>efi-readvar -v dbx</code> ブートローダーの署名情報は以下で確認できます: * Windows PowerShell: <code>Get-PfxCertificate</code>{{efn|<code>Get-AuthenticodeSignature</code>はカタログ署名が使われる場合があるため非推奨: https://github.com/PowerShell/PowerShell/issues/23820 。}} * Linux: <code>sbverify --list</code> 例えば Windows PowerShell では以下のような感じです: <syntaxhighlight lang="powershell"> PS C:\WINDOWS\system32> mountvol S: /S; if ($?) { Get-PfxCertificate 'S:\EFI\Microsoft\Boot\bootmgfw.efi'; mountvol S: /D } Thumbprint Subject ---------- ------- FACDE3D80E99AFCC15E08AC5A69BD22785287F79 CN=Microsoft Windows, O=Microsoft Corporation, L=Redmond, S=Washington, C=US </syntaxhighlight> また Ubuntu や Debian では署名されたブートローダー (grub-efi-*-signedパッケージ) と非署名のブートローダー (grub-efi-*-unsignedパッケージ) の両方が用意されており、ブートローダーの正体がどれか、また署名されたブートローダーの署名内容を確認するのは以下のような感じとなります: <syntaxhighlight lang="shell-session"> $ dpkg -L grub-efi-amd64-signed | grep -i '\.efi' | xargs md5sum # インストールされている署名されたブートローダーのハッシュを表示(grub*は通常版、gcd*は光学ブートメディア向け、grubnet*はネットブート向け) 2bd267fb12bd3b0fe26a9dfb4290868d /usr/lib/grub/x86_64-efi-signed/gcdx64.efi.signed f689e93336a015fa6eb93e1913b13482 /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed b63c7618fb96d52520b42b8cc7b124f0 /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed $ sudo sh -c "md5sum /boot/efi/EFI/BOOT/*" # 現在のbootloaderがどれを使っているかを確認(署名されたgrubを使用) b63c7618fb96d52520b42b8cc7b124f0 /boot/efi/EFI/BOOT/BOOTX64.EFI $ sudo sbverify --list /boot/efi/EFI/BOOT/BOOTX64.EFI signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/efi/EFI/BOOT/BOOTX64.EFI Signature verification OK </syntaxhighlight> なお Linux では grub の代わりに使えるブートローダーとして systemd-boot もあります。systemd-boot の署名版は Debian が systemd-boot-efi-*-signed パッケージとして用意しているようです(Ubuntu未搭載)。 <!--TODO: TPM (Trusted Platform Module) チップ --> === カーネル本体の改ざんを防ぐ === カーネルはオペレーティングシステム (OS) の下層で動き続けるプログラムです。カーネル本体の実行ファイルもブートローダーと同様に署名が行われており、UEFI Secure Boot が有効であればその検証をブートローダーが行います。Linux では GRUB の UEFI Secure Boot と shim_lock の連携がそれに相当します<ref>[https://www.gnu.org/software/grub/manual/grub/grub.html#UEFI-secure-boot-and-shim GNU GRUB Manual 2.14 - 19.4 UEFI secure boot and shim support] フリーソフトウェア財団</ref>。 なお Ubuntu には署名されたカーネル (linux-image-*パッケージ) と非署名のカーネル (linux-image-unsigned-*パッケージ) の両方が用意されており、署名されているカーネルは以下のような感じでその署名が確認できます: <syntaxhighlight lang="shell-session"> $ sudo sbverify --list /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を確認する signature 1 image signature issuers: - /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority image signature certificates: - subject: /C=GB/ST=Isle of Man/O=Canonical Ltd./OU=Secure Boot/CN=Canonical Ltd. Secure Boot Signing (2022 v1) issuer: /C=GB/ST=Isle of Man/L=Douglas/O=Canonical Ltd./CN=Canonical Ltd. Master Certificate Authority $ sudo sbverify --cert /usr/share/grub/canonical-uefi-ca.crt /boot/vmlinuz-$(uname -r) # Linuxカーネル本体の署名を検証する Signature verification OK </syntaxhighlight> === カーネルモジュールの改ざんを防ぐ === カーネルモジュールも署名されており、その検証をカーネルが行っています。Windowsカーネルでは ci.dll (Code Integrityモジュール)が、Linuxカーネルでは CONFIG_MODULE_SIG コンパイルオプションがその検証を行っています。 カーネルによるカーネルモジュールの検証が有効かどうかは以下で確認することができます: * Linux: <code>cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG=</code> カーネルによるカーネルモジュールの検証で読み込みを弾くかどうかは以下で確認することができます: * Windows: 強制モードか評価モード (監査モード) かを確認する PowerShell スクリプトが Microsoft のサイトに存在します: https://support.microsoft.com/en-us/windows/hardware/drivers/the-windows-driver-policy#is-my-device-in-evaluation-mode-or-enforcement-mode * Linux: <code>cat /sys/module/module/parameters/sig_enforce</code> また Linux では検証で読み込みを弾かない場合でも検証外カーネルモジュールを読み込んだ場合はdmesgに警告が出て '''Tainted kernel''' 扱いとなります<ref>[https://docs.kernel.org/admin-guide/tainted-kernels.html Tainted kernels] Linux Foundation</ref>。以下はその例です: <syntaxhighlight lang="shell-session"> $ cat /boot/config-$(uname -r) | grep CONFIG_MODULE_SIG= # y=Yes, n=No CONFIG_MODULE_SIG=y $ cat /sys/module/module/parameters/sig_enforce # Y=Yes, N=No N $ sudo dmesg | grep 'module verification' [ 8.928361] nvidia: module verification failed: signature and/or required key missing - tainting kernel $ wget http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/plain/tools/debugging/kernel-chktaint [...] $ sudo sh ./kernel-chktaint Kernel is "tainted" for the following reasons: * externally-built ('out-of-tree') module was loaded (#12) * unsigned module was loaded (#13) Raw taint value as int/string: 12288/'G OE ' Tainted modules: * nvidia (OE) * nvidia_drm (OE) * nvidia_modeset (OE) * nvidia_uvm (OE) For a more detailed explanation of the various taint flags see Documentation/admin-guide/tainted-kernels.rst in the Linux kernel sources or https://kernel.org/doc/html/latest/admin-guide/tainted-kernels.html </syntaxhighlight> また Linux では以下のような感じで個々のモジュールの署名が確認できます: <syntaxhighlight lang="shell-session"> $ modinfo /lib/modules/$(uname -r)/kernel/arch/x86/kernel/msr.ko.zst filename: /lib/modules/7.0.0-38-generic/kernel/arch/x86/kernel/msr.ko.zst license: GPL description: x86 generic MSR driver author: H. Peter Anvin <hpa@zytor.com> srcversion: 639B995855A3528050FD532 depends: intree: Y name: msr retpoline: Y vermagic: 7.0.0-38-generic SMP preempt mod_unload modversions sig_id: PKCS#7 signer: Build time autogenerated kernel key sig_key: 3B:E7:D3:BF:D3:2E:D9:CA:9C:17:D2:E9:5F:1A:1C:AE:67:D5:82:2F sig_hashalgo: sha512 signature: 96:BC:2A:18:6E:4D:D8:E5:28:69:9D:E6:65:89:95:D4:BE:4C:5B:7C: 4A:23:11:75:F6:FE:63:79:FC:29:9B:F7:EA:24:B6:F1:EF:F3:80:17: 0B:C0:1E:46:61:29:BB:F9:E0:AC:81:69:85:73:7D:D4:77:82:A8:DB: [...] </syntaxhighlight> === システムファイル改ざんを防ぐ === システムファイル改ざんを防ぐ良い方法はシステム領域を読み取り専用にすることですが、仮にファイルシステムを読み取り専用のファイルシステム(SquashFSやEROFS)にしたとしても記録する場所がSSDであればブロック単位での上書きが可能となります。 1回だけ書き込めて上書きが不可能な媒体としてはCD-R、DVD-R、DVD+R、BD-Rなどの一部の光学メディアが存在しますが、これらをブートメディアとして使用するのは頻繁なアップデートが難しくなります。 そのほかの手法としては別のコンピュータからシステムファイルを取得する「ネットワークブート」を行うという手法もありますが、これはネットワーク経由でシステムファイルが盗まれる可能性と隣り合わせです。しかしながらプロトコルにUEFI HTTPSを、認証に相互認証のmTLSを用いて、その秘密鍵をTPMで管理してOSから読めなくすることでネットワークブートの安全性は何とか確保できるかもしれません(対応マザーボードは不明)。 一方、Android や ChromeOS ではブロックデバイス単位での改ざん検知 (dm-verify) によってシステムイメージの改ざんを防止しています<ref>[https://source.android.com/docs/security/features/verifiedboot/dm-verity?hl=ja dm-verity の実装] Google</ref><ref>[https://research.google/pubs/verified-boot-on-chrome-os-and-how-to-do-it-yourself/ Verified Boot on Chrome OS and How to do it yourself] Google</ref>。 === カーネルメモリ改ざんを防ぐ === カーネルメモリのコード部分は MMU の書き込み禁止によって保護されています。iOS / macOS では Kernel Integrity Protection が<ref>[https://support.apple.com/ja-jp/guide/security/sec8b776536b/web オペレーティングシステムの整合性] Apple</ref> 、Linux では Kernel Strict RWX がこれに相当します<ref>[https://docs.kernel.org/security/self-protection.html Kernel Self-Protection] Linux Foundation</ref>。Windows でもカーネルモードに読み込み専用メモリセグメントが存在し、これに書き込もうとするとブルースクリーンで ATTEMPTED_WRITE_TO_READONLY_MEMORY (0xBE) が発行されます<ref>[https://learn.microsoft.com/ja-jp/windows-hardware/drivers/debugger/bug-check-0xbe--attempted-write-to-readonly-memory バグ チェック 0xBE: ATTEMPTED_WRITE_TO_READONLY_MEMORY] Microsoft</ref>。しかしながら Linux Kernel では kprobes、Static Keys、Static calls などで自己書き換えが多用されているため、一時的にコード部分を書き込み可能なページに割り当てて書き換える text_poke(...) という抜け道が存在します。 また定期的に改ざんが行われていないかをチェックする仕組みも存在します。Windows では[[:w:Kernel Patch Protection|Kernel Patch Protection]] (PatchGuard) / HyperGuard が、Linux では Linux Kernel Runtime Guard(外部パッチ)がこれに該当します。Windows の PatchGuard では改ざんが検出されたらブルースクリーンで CRITICAL_STRUCTURE_CORRUPTION が発行されます。 <!--TODO: Windows の HVCI、macOS の Secure Page Table Monitor / Trusted Execution Monitor--> <!-- === アプリケーション改ざんを防ぐ === SELinux / AppArmor --> == 攻撃用AIを対策する == 攻撃用AIでは基本的に賢いかつ制限の緩い大規模言語モデル (LLM) が使われています。この代表的な例として GLM 5.3 や Qwen3.8-27B-ABLITERATED が存在します。 === コンテキスト爆弾を設置する === 攻撃用AIの対策では相手のLLMを止めることが重要となります。そこで使えるのが'''コンテキスト爆弾''' (context bombs) という手法です<ref>[https://arstechnica.com/security/2026/07/now-defenders-are-embracing-the-prompt-injection-too/ Now, defenders are embracing the prompt injection, too] Ars Technica 2026年7月14日</ref>。 このコンテキスト爆弾は「相手のLLMに対し応答やツール呼び出しで禁止されていることを行わせようとする」というプロンプトインジェクションの一種であり、それによって相手のガードレールがLLMを止めることで相手からの攻撃を防ぎます。この手法は相手の読みそうなテキストにただプロンプトを書いておけば良いだけなので、お手軽に使えます。 コンテキスト爆弾のテキスト例は以下のリポジトリに存在します: * https://github.com/tracebit-com/context-bombs === ハニーポット === ハニーポットは攻撃者を引きつける役目を担います。ハニーポットの評価フレームワークには「UHBS」(Universal Honeypot Benchmarking Standard) が、その品質基準には「UHQS」(Universal Honeypot Quality Score) が存在しますが、2026年現在多くのハニーポットがFランク〜Dランクと残念な状況になっています<ref>[https://uhbs.github.io/uhbs-standard/mkdocs/conformance/ Overview - UHBS — Honeypot Evaluation Framework]</ref>。 <!-- == 自作コードの脆弱性を塞ぐ == 書きかけ --> == 脚注 == <references group="注釈"/> == 参考文献 == <references/> {{DEFAULTSORT:こんひゆうたせきゆりてい}} [[Category:計算機科学]] [[Category:情報技術]] jf8og83vpgx7ous7lgcv2eq02lmdr69 防災/大雪 0 48952 304545 2026-10-10T12:00:33Z モチモチのキナコモチ 92391 ページの作成:「== 大雪によって起こる災害 == 大雪によって起こる災害は主に東北地方で確認されており、様々な家屋への被害や生活網に支障が起きるものです。 この写真を見てください。 https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%20%E7%81%BD%E5%AE%B3&imgurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2Fimg%2F120205_02.jpg&imgrefurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2F2012%2F02%2F04-171222…」 304545 wikitext text/x-wiki == 大雪によって起こる災害 == 大雪によって起こる災害は主に東北地方で確認されており、様々な家屋への被害や生活網に支障が起きるものです。 この写真を見てください。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%20%E7%81%BD%E5%AE%B3&imgurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2Fimg%2F120205_02.jpg&imgrefurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2F2012%2F02%2F04-171222.php&docid=CtVpkZkx5_ocjM&tbnid=uyUYn1OBNgXHPM&vet=12ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA..i&w=300&h=200&hcb=2&ved=2ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA|フレーム|代替文=大雪で家屋が倒壊してしまっています。|大雪によって起こった家屋の倒壊]] 雪の威力は凄まじく家などの建物を簡単に倒壊させ、また、屋根からの落雪や雪寄せ中に側溝に落ちるなどして死者や怪我人が出ています。 === 雪により埋まる1階 === 本当に物凄い雪が降った時は、建物の1階部分が雪に埋まってしまいます。 [[https://nakaichiya.jp/2018/02/07/%E4%BB%8A%E6%97%A5%E3%82%82%E7%84%A1%E7%90%86%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82/|フレーム|代替文=そのようになると1階からの出入りが不可能になります。|まさにそういうことになってしまった家]] == 対策方法 == 地震と同じく、日頃からの備えが大切です。また、急な外出は避けてできるだけ屋内に居ましょう。そのほか、FF式暖房機などの給排気口が雪で塞がると排気ガスが逆流し、一酸化炭素中毒になってしまう恐れがあるので気をつけましょう。 39mdvve2qrkm3hma1zjmpsfpibh1d6q 304546 304545 2026-10-10T12:02:17Z モチモチのキナコモチ 92391 304546 wikitext text/x-wiki == 大雪によって起こる災害 == 大雪によって起こる災害は主に東北地方で確認されており、様々な家屋への被害や生活網に支障が起きるものです。 この写真を見てください。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%20%E7%81%BD%E5%AE%B3&imgurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2Fimg%2F120205_02.jpg&imgrefurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2F2012%2F02%2F04-171222.php&docid=CtVpkZkx5_ocjM&tbnid=uyUYn1OBNgXHPM&vet=12ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA..i&w=300&h=200&hcb=2&ved=2ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA|フレーム|代替文=大雪で家屋が倒壊してしまっています。|大雪によって起こった家屋の倒壊]] 雪の威力は凄まじく家などの建物を簡単に倒壊させ、また、屋根からの落雪や雪寄せ中に側溝に落ちるなどして死者や怪我人が出ています。 === 雪により埋まる1階 === 本当に物凄い雪が降った時は、建物の1階部分が雪に埋まってしまいます。 [[https://nakaichiya.jp/2018/02/07/%E4%BB%8A%E6%97%A5%E3%82%82%E7%84%A1%E7%90%86%E3%81%A7%E3%81%97%E3%81%9F%E3%80%82/|フレーム|代替文=そのようになると1階からの出入りが不可能になります。|まさにそういうことになってしまった家]] == 対策方法 == 地震と同じく、日頃からの備えが大切です。また、急な外出は避けてできるだけ屋内に居ましょう。そのほか、FF式暖房機などの給排気口が雪で塞がると排気ガスが逆流し、一酸化炭素中毒になってしまう恐れがあるので気をつけましょう。 注意:写真のところはGoogleに飛びます。 gxdm609ac8q9ga2gjwqcfrub607sjnn 304547 304546 2026-10-10T12:05:58Z モチモチのキナコモチ 92391 304547 wikitext text/x-wiki == 大雪によって起こる災害 == 大雪によって起こる災害は主に東北地方で確認されており、様々な家屋への被害や生活網に支障が起きるものです。 この写真を見てください。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%20%E7%81%BD%E5%AE%B3&imgurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2Fimg%2F120205_02.jpg&imgrefurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2F2012%2F02%2F04-171222.php&docid=CtVpkZkx5_ocjM&tbnid=uyUYn1OBNgXHPM&vet=12ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA..i&w=300&h=200&hcb=2&ved=2ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA|フレーム|代替文=大雪で家屋が倒壊してしまっています。|大雪によって起こった家屋の倒壊]] 雪の威力は凄まじく家などの建物を簡単に倒壊させ、また、屋根からの落雪や雪寄せ中に側溝に落ちるなどして死者や怪我人が出ています。 === 雪により埋まる1階 === 本当に物凄い雪が降った時は、建物の1階部分が雪に埋まってしまいます。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%202%E9%9A%8E%E3%81%AE%E7%AA%93%E3%81%8B%E3%82%89%E5%87%BA%E5%85%A5%E3%82%8A&imgurl=https%3A%2F%2Fblog-imgs-50.fc2.com%2Fo%2Fk%2Fa%2Fokapon2005%2FP3030207.jpg&imgrefurl=https%3A%2F%2Fokapon2005.com%2Fblog-entry-1657.html&docid=Cvy8wiQcizYYFM&tbnid=vQ9akos7O4RWIM&vet=12ahUKEwi9z-H7sK-XAxWKj68BHXRnGwsQnPAOegUImwEQAA..i&w=1024&h=768&hcb=2&ved=2ahUKEwi9z-H7sK-XAxWKj68BHXRnGwsQnPAOegUImwEQAA|フレーム|代替文=そのようになると1階からの出入りが不可能になります。|まさにそういうことになってしまった家]] == 対策方法 == 地震と同じく、日頃からの備えが大切です。また、急な外出は避けてできるだけ屋内に居ましょう。そのほか、FF式暖房機などの給排気口が雪で塞がると排気ガスが逆流し、一酸化炭素中毒になってしまう恐れがあるので気をつけましょう。 注意:写真のところはGoogleに飛びます。 2zok23qip4ondfxlwae6khqyxb9hzqe 304548 304547 2026-10-10T12:06:46Z モチモチのキナコモチ 92391 304548 wikitext text/x-wiki == 大雪によって起こる災害 == 大雪によって起こる災害は主に東北地方で確認されており、様々な家屋への被害や生活網に支障が起きるものです。 この写真を見てください。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%20%E7%81%BD%E5%AE%B3&imgurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2Fimg%2F120205_02.jpg&imgrefurl=http%3A%2F%2Fwww.tokamachi-shinbun.com%2Farchives%2F2012%2F02%2F04-171222.php&docid=CtVpkZkx5_ocjM&tbnid=uyUYn1OBNgXHPM&vet=12ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA..i&w=300&h=200&hcb=2&ved=2ahUKEwjp9eSnrq-XAxX5rlYBHTOgFwY4ChCc8A56BQicARAA|フレーム|代替文=大雪で家屋が倒壊してしまっています。|大雪によって起こった家屋の倒壊]] 雪の威力は凄まじく家などの建物を簡単に倒壊させ、また、屋根からの落雪や雪寄せ中に側溝に落ちるなどして死者や怪我人が出ています。 === 雪により埋まる1階 === 本当に物凄い雪が降った時は、建物の1階部分が雪に埋まってしまいます。 [[https://www.google.com/imgres?q=%E5%A4%A7%E9%9B%AA%202%E9%9A%8E%E3%81%AE%E7%AA%93%E3%81%8B%E3%82%89%E5%87%BA%E5%85%A5%E3%82%8A&imgurl=https%3A%2F%2Fblog-imgs-50.fc2.com%2Fo%2Fk%2Fa%2Fokapon2005%2FP3030207.jpg&imgrefurl=https%3A%2F%2Fokapon2005.com%2Fblog-entry-1657.html&docid=Cvy8wiQcizYYFM&tbnid=vQ9akos7O4RWIM&vet=12ahUKEwi9z-H7sK-XAxWKj68BHXRnGwsQnPAOegUImwEQAA..i&w=1024&h=768&hcb=2&ved=2ahUKEwi9z-H7sK-XAxWKj68BHXRnGwsQnPAOegUImwEQAA|フレーム|代替文=そのようになると1階からの出入りが不可能になります。|まさにそういうことになってしまった家]] == 対策方法 == 地震と同じく、日頃からの備えが大切です。また、急な外出は避けてできるだけ屋内に居ましょう。そのほか、FF式暖房機などの給排気口が雪で塞がると排気ガスが逆流し、一酸化炭素中毒になってしまう恐れがあるので気をつけましょう。 注意:1と2はGoogleに飛びます。 fvb0zi8p82inp6cm8znb28u73emvbp3 高等学校日本史探究/律令体制再編期の政治と社会Ⅱ 0 48956 304590 2026-10-11T04:43:24Z Kwawe 68789 新規作成。これから少しずつ執筆する。 304590 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == == 法・儀式の整備と教育 == fbxgbq5fgn8488f12i2bzj5z9hnqz08 304591 304590 2026-10-11T04:44:18Z Kwawe 68789 資料出所を追加。 304591 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 flsjcl8547dpr8mud30r2au7eg9n6w4 304592 304591 2026-10-11T04:46:08Z Kwawe 68789 カテゴリーを追加。 304592 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] 9nnwzzdcc39uhx4hi94zdw32vewg731 304600 304592 2026-10-11T05:31:59Z Kwawe 68789 304600 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] lcczly28ntk692og205rcd05jzerd83 304601 304600 2026-10-11T05:34:37Z Kwawe 68789 /* 律令政治の再編成 */ 806年、平城天皇は官司再編を行った。2000年の中央省庁再編と同じ構造を古代でも行った。 304601 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] brfhj161dkqrxncaazyb1rs5xxcjsfl 304605 304601 2026-10-11T06:35:50Z Kwawe 68789 /* 律令政治の再編成 */ 平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになった。 304605 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 809年、平城天皇の容体悪化から弟の嵯峨天皇に譲りました。その後、平城太上天皇[平城上皇]として平城京で闘病生活を送っていました。平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになりました。平城上皇の側近などが平城京に移りました。その結果、嵯峨天皇〔平安京〕と平城上皇〔平城京〕それぞれが政策方針を出しました(二所朝廷)。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] rf3lcn5ao7xxm9vzjfakc7p3x7ap5c9 304609 304605 2026-10-11T07:01:43Z Kwawe 68789 /* 律令政治の再編成 */ 平城上皇は藤原式家の藤原薬子・藤原仲成と手を組み、律令政権の中心を平城京に戻そうとした。 304609 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 809年、平城天皇の容体悪化から弟の嵯峨天皇に譲りました。その後、平城太上天皇[平城上皇]として平城京で闘病生活を送っていました。平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになりました。平城上皇の側近などが平城京に移りました。その結果、嵯峨天皇〔平安京〕と平城上皇〔平城京〕それぞれが政策方針を出しました(二所朝廷)。 藤原薬子〔藤原種継の娘〕と藤原仲成〔藤原薬子の兄〕が平城太上天皇の側近としていました。平城上皇は藤原式家の藤原薬子・藤原仲成と手を組み、律令政権の中心を平城京に戻そうとしました。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] i95vluoqzo7pmo6fdzy3vdtcnwurmat 304615 304609 2026-10-11T09:05:25Z Kwawe 68789 /* 律令政治の再編成 */ 810年、新価値観側の秘密が旧価値観側に漏れないように新しい役所[蔵人所]を作った。 304615 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 809年、平城天皇の容体悪化から弟の嵯峨天皇に譲りました。その後、平城太上天皇[平城上皇]として平城京で闘病生活を送っていました。平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになりました。平城上皇の側近などが平城京に移りました。その結果、嵯峨天皇〔平安京〕と平城上皇〔平城京〕それぞれが政策方針を出しました(二所朝廷)。 藤原薬子〔藤原種継の娘〕と藤原仲成〔藤原薬子の兄〕が平城太上天皇の側近としていました。平城上皇は藤原式家の藤原薬子・藤原仲成と手を組み、律令政権の中心を平城京に戻そうとしました。 やがて、新価値観側の嵯峨天皇は旧価値観側の平城上皇と施策方針を巡って争うようになりました。810年、新価値観側の秘密が旧価値観側に漏れないように新しい役所[蔵人所]を作りました。新しい役所[蔵人所]の代表者は2名選ばれ、蔵人所の初代代表者として藤原冬嗣と巨勢野足を選びました。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] ht0h7zmmsrelkqif12mk11yiphbsbrt 304616 304615 2026-10-11T09:07:27Z Kwawe 68789 /* 律令政治の再編成 */ 304616 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 809年、平城天皇の容体悪化から弟の嵯峨天皇に譲りました。その後、平城太上天皇[平城上皇]として平城京で闘病生活を送っていました。平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになりました。平城上皇の側近などが平城京に移りました。その結果、嵯峨天皇〔平安京〕と平城上皇〔平城京〕それぞれが政策方針を出しました(二所朝廷)。 藤原薬子〔藤原種継の娘〕と藤原仲成〔藤原薬子の兄〕が平城太上天皇の側近としていました。平城上皇は藤原式家の藤原薬子・藤原仲成と手を組み、律令政権の中心を平城京に戻そうとしました。 やがて、新価値観側の嵯峨天皇は旧価値観側の平城上皇と施策方針を巡って争うようになりました。810年、新価値観側の秘密が旧価値観側に漏れないように新しい役所[蔵人所]を作りました。新しい役所[蔵人所]の代表者[蔵人頭]は2名選ばれ、蔵人所の初代蔵人頭として藤原冬嗣と巨勢野足を選びました。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] sjlo8sj2q2ylflwr98jbpgeargv7ivi 304625 304616 2026-10-11T11:17:45Z Kwawe 68789 /* 律令政治の再編成 */ 蔵人所は現在の宮内庁書陵部・宮内庁式部職と同じ業務内容になる。 304625 wikitext text/x-wiki [[小学校・中学校・高等学校の学習]]>[[高等学校の学習]]>[[高等学校地理歴史]]>[[高等学校日本史探究]]>律令体制再編期の政治と社会Ⅱ == 律令政治の再編成 == 桓武天皇の政治改革は次期天皇の平城天皇と嵯峨天皇も引き継ぎました。806年、平城天皇は官司再編を行いました。2000年の中央省庁再編<ref>中央省庁再編の詳細は[[高等学校日本史探究/新たな世紀の日本へⅡ|新たな世紀の日本へⅡ]]の「行政改革と日米安保の変化」を参照してください。</ref>と同じように役所数と職員数を減らして、役所をまとめて官司機関をすっきりさせました。その結果、予算の使い過ぎを防げました。また、地方行政機関の暴走を防ぐため地方監察官[観察使]各1名を畿内七道に4年間採用しました。 809年、平城天皇の容体悪化から弟の嵯峨天皇に譲りました。その後、平城太上天皇[平城上皇]として平城京で闘病生活を送っていました。平城上皇の容体が回復すると、平城京で嵯峨天皇の政策方針に口を出すようになりました。平城上皇の側近などが平城京に移りました。その結果、嵯峨天皇〔平安京〕と平城上皇〔平城京〕それぞれが政策方針を出しました(二所朝廷)。 藤原薬子〔藤原種継の娘〕と藤原仲成〔藤原薬子の兄〕が平城太上天皇の側近としていました。平城上皇は藤原式家の藤原薬子・藤原仲成と手を組み、律令政権の中心を平城京に戻そうとしました。 やがて、新価値観側の嵯峨天皇は旧価値観側の平城上皇と施策方針を巡って争うようになりました。810年、新価値観側の秘密が旧価値観側に漏れないように新しい役所[蔵人所]を作りました。新しい役所[蔵人所]の代表者[蔵人頭]は2名選ばれ、蔵人所の初代蔵人頭として藤原冬嗣と巨勢野足を選びました。 蔵人所は現在の宮内庁書陵部と同じように大事な文書・秘密資料を保管して、天皇の公務を止めないようにしました。また、宮内庁式部職と同じように宮中行事の準備・来客応対・文書・打ち合わせまで行うようになりました。蔵人は天皇の側近として大事なお話にも関わるようになり、やがて蔵人頭から参議へ昇格するようになりました。 == 法・儀式の整備と教育 == == 資料出所 == * 平雅行、横田冬彦ほか編著『日本史探究』実教出版株式会社 2023年 * 佐藤信、五味文彦ほか編著『詳説日本史探究』株式会社山川出版社 2023年 * 渡邊晃宏ほか編著『日本史探究』東京書籍株式会社 2023年 * 伊藤純郎ほか編著『高等学校日本史探究』株式会社清水書院 2023年 * 大橋幸泰ほか編著『高等学校日本史探究』株式会社第一学習社 2023年 * 山中裕典著'''『'''改訂版 大学入学共通テスト 歴史総合、日本史探究の点数が面白いほどとれる本'''』'''株式会社KADOKAWA 2024年 * 佐藤信、五味文彦ほか編著『詳説日本史研究』株式会社山川出版社 2017年 * 河合敦著『世界一わかりやすい河合敦の日本史B[原始~鎌倉]の特別講座』株式会社KADOKAWA 2014年(絶版本) * 外園豊基編集代表『最新日本史図表』株式会社第一学習社 2026年 * 東京法令出版編著『歴史資料館 日本史のライブラリー』東京法令出版株式会社 2026年 == ここに注意!! == [[カテゴリ:高等学校日本史探究]] [[カテゴリ:平安時代]] o2k0wrv7jrq1k7dljnckob1gyreubcy