出来の悪い英文をどう翻訳するか

# はじめに
英語で書かれた技術文書を翻訳していると、意味が分からない文に出会うことがあります。もちろん、自分の知識不足に起因する場合もあるのですが、原文の出来があまりに悪く、文句のひとつでも言いたくなることがあります。最近、そんな英文を見る機会がありました。

本稿では、それを翻訳した方々がどう「料理」したかを紹介したいと思います。翻訳の内容に言及することもありますが、それが誤訳であると指摘しているわけではありません。今回取り上げる内容は、そもそも原文に問題があるのですから。

# 今回取り上げる例文
今回はOWASPで公開されている、[OWASP Top 10 - 2017](https://www.owasp.org/images/7/72/OWASP_Top_10-2017_%28en%29.pdf.pdf)で第４位に新規ランクインしたXML外部エンティティ参照(XXE)を取り上げます。そのなかで、SAMLに言及している箇所が対象です。

世の中には数多の出来の悪い文章がありますが、個人が書いたものを例にするのは良くありません:frowning2:。それに対して、OWASPが公開しているものであれば、多くの人がレビューをしているはずなので、特定の個人を攻撃することにはならないと思います。

以下に該当箇所を引用します。

>• If your application uses SAML for identity processing within　federated security or single sign on (SSO) purposes. SAML uses XML for identity assertions, and may be vulnerable.

最初の文は、**If** で始まっていますが、「もし〜ならば、〜である。」の「〜である。」の部分がありません。本稿では、これをどう修復して翻訳したかを見ていくことにします。また、OWASP Top 10 は、日本語を含む多くの言語に翻訳されています。それぞれの翻訳でどう対応したかは興味深い問題だと思います。

# [日本語訳](https://www.owasp.org/images/2/23/OWASP_Top_10-2017%28ja%29.pdf)ではどう対応したか

実は、この文が含まれるリストの直前には次の文があります。

>Applications and in particular XML-based web services or downstream integrations might be vulnerable to attack if:

既に **if:** があるので、リストの各項目では、**If** を付けずに、その条件から始めれば良いことになります。そのため日本語では **If** にあたる部分を無くして以下のように訳しています。

>アプリケーションが統合されたセキュリティあるいはシングルサインオン（SSO）の目的でIDの処理にSAMLを使用する。SAMLはIDアサーションにXMLを使用しているため、脆弱である可能性がある。

原文に忠実な良い訳だと思います。後半の

>SAMLはIDアサーションにXMLを使用しているため、脆弱である可能性がある。

は前半に対する説明です。この部分だけを読むと「SAMLは...脆弱である可能性がある。」と解釈されるかもしれません。ここは、アプリケーションがXXE攻撃に対して脆弱であるか否かの判断基準を説明している部分なので、「脆弱である可能性がある。」の主語は、アプリケーションになります。

SAMLがXXE攻撃に対して脆弱であることは既に分かっています。だからどういう対策が必要になるかを説明しているのに、SAMLを主語にして、「SAMLは脆弱である**可能性がある**。」と言うのはおかしいですよね。

# 他の言語ではどう対応したのか

OWASP Top 10 - 2017　の原文は英語で書かれていて、それが日本語を含む様々な言語に翻訳されています。なかには、[ヘブライ語](https://www.owasp.org/images/4/48/OWASP-Top-10-2017-he.pdf)などもあり、もちろん手も足もでません。しかし、書かれている内容自体は理解しているので、一部の以前習ったことのある言語では、何となく分かる部分もあります。以下では、ドイツ語と中国語について見てみようと思います。

## ドイツ語の場合

[ドイツ語](https://www.owasp.org/images/9/90/OWASP_Top_10-2017_de_V1.0.pdf)では以下のように翻訳されています。

>• Wenn Ihre Anwendung SAML für die Identitäts verarbeitung im Rahmen von föderierter Sicherheit oder für Single Sign On (SSO) Zwecke verwendet. SAML verwendet XML für Identitätsbekundungen und kann daher anfällig sein.

"Wenn Ihre Anwendung ..."とあるようにドイツ語では、**If** に該当する部分を取り去ってはいません。その代わりに、リストの前にある文を以下のように書き換えています。

>Anwendungen und insbesondere XML-basierte Webservices oder nachgelagerte Integrationen können in folgenden Fällen anfällig für Angriffe sein:

"in folgenden Fällen ..." (次の場合に...）というように書き換えて **if:** にあたるものは使っていません。そのため、リストの各項目を"Wenn(英語のWhen)"で始めても問題は生じません。このように書けば、どのまでが脆弱性に該当するための条件であるかが、分かりやすいという利点があります。

また、

>für die Identitäts verarbeitung im Rahmen von föderierter Sicherheit oder für Single Sign On (SSO) Zwecke verwendet

というように、"Single Sign On"の前に"für"を挿入しています。こうすると、"purposes"を修飾しているのは、"Single Sign On (SSO)"だけだということが明確になります。そこまで厳密にしなくても良いような気もしますが。

## 中国語の場合

[中国語](https://www.owasp.org/images/d/dc/OWASP_Top_10_2017_%E4%B8%AD%E6%96%87%E7%89%88v1.3.pdf)では以下のように翻訳されています。

>如果为了实现安全性或单点登录（SSO），您的应用程序使用 SAML进行身份认证。而SAML使用XML进行身份确认，那么您的应用程序就容易受到XXE攻击。

「如果〜」とあるように、中国語でも冒頭の **If** に該当する部分を取り去ってはいません。そして、リストの前の文を次のように書き換えています。

>应用程序和特别是基于XML的Web服务或向下集成，可能在以下方面容易受到攻击：

「在以下方面〜」（以下のような方法で〜）と書き換えて **if:** にあたるものは使っていません。

さらに中国語では、英語の原文で、"SAML uses XML for identity assertions, and may be vulnerable."となっている部分を以下のように訳しています。

>而SAML使用XML进行身份确认，那么您的应用程序就容易受到XXE攻击。

後半の部分では、「あなたのアプリケーション（您的应用程序）はXXE攻撃に対して脆弱です。」というように主語を補っています。さすがに「XXE攻撃に対して」の部分はやりすぎかもしれませんが、原文である英語版よりも分かりやすくなっていると思います。

# 原文の直し方

ここまでは、各言語の翻訳を担当された方々が、工夫して分かりやすい訳文を作っていることを見てきました。しかし、根本原因は元になった英文の出来の悪さです。特にXXEに関する項目が良くありません。新たに追加された部分だからでしょうか。他の脆弱性項目と文体を合わせるだけでも、かなり読みやすくなるはずです。例えば、１位にランクインしているInjectionの項目では次のようになっています。

>An application is vulnerable to attack when:
• User-supplied data is not validated, filtered, or sanitized by the application.

この文の特徴としては、以下が挙げられます。

- １条件を１文で表現している

複数の文で構成すると、どこまでが脆弱性に該当するための条件であるかが分かり難くなります。それに対して、上記のように、一つの文で簡潔に表現すると分かりやすいですよね。

- 重要なものを主語にしている

読者が知りたいのは、この脆弱性に該当するか否かを知るためには、何をチェックしたら良いかという点です。従って、それを先頭に持ってくれば読みやすくなります。上記では、"User-supplied data"が主語になっています。

こうした点を踏まえて、私が直すとしたら以下のようになります。リストの前にある **if:** は取り除かない前提です。

>• SAML, which depends on XML to create identity assertions, is used for identity processing within federated security or single sign on (SSO) purposes.

「そこまで言うなら自分で直せば。」という声が聞こえてきそうです。そのとおりかもしれません。しかし、XXEの項目で直す必要のあるものは、これだけではありません。整合性をとるためには、全体に手を入れる必要があり、かなりの分量になります。今、大幅に原文を直してしまうと、これまでの翻訳の努力が無駄になってしまいます。差し当たっては、翻訳する側で工夫して何とかするしかなさそうです。

# おわりに

原文に忠実な日本語訳、厳密性を追求したドイツ語訳、原文で舌足らずの部分を補足して解りやすくした中国語訳という感じでしょうか。どれも翻訳者の苦心の跡が見える素晴らしい訳だと思います。

本稿では、翻訳の元となった英語の原文の拙さを批判しています。翻訳してくださった方々を批判する意図は全くないことはご理解ください。