[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AEA32F73Y12BSTR91AJ9DN":3,"skill-same:01M6AEA32F73Y12BSTR91AJ9DN":87},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6AEA32F73Y12BSTR91AJ9DN","privacy-data-sharing",null,"Build privacy-preserving data sharing platforms using synthetic data generation with the SDV library, data clean rooms, secure enclaves, and utility measurement. Covers end-to-end architecture for sharing analytical datasets while preserving individual privacy guarantees.","mukul975\u002FPrivacy-Data-Protection-Skills","mukul975","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F42860185?v=4","01M6ADEQR8T5M4EEG6C67BQCWF","Mahipal","01M6ADNKWX1HF4Q5DKEXT5M774",338,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32],"privacy","data","sharing","privacy data sharing","architecture","secure","synthetic data","library","engineering","2026-11-10 10:12:30",false,"---\nname: privacy-data-sharing\ndescription: >-\n  Build privacy-preserving data sharing platforms using synthetic data generation\n  with the SDV library, data clean rooms, secure enclaves, and utility\n  measurement. Covers end-to-end architecture for sharing analytical datasets\n  while preserving individual privacy guarantees.\nlicense: Apache-2.0\nmetadata:\n  author: mukul975\n  version: \"1.0\"\n  domain: privacy\n  subdomain: privacy-engineering\n  tags: \"data-sharing, synthetic-data, data-clean-rooms, secure-enclaves, sdv-library\"\n---\n\n# Privacy-Preserving Data Sharing Platform\n\n## Overview\n\nPrivacy-preserving data sharing enables organizations to derive analytical value from combined datasets without exposing raw personal data. This skill covers four primary approaches: synthetic data generation, data clean rooms, secure enclaves, and federated analytics, along with utility measurement frameworks to ensure shared data remains useful.\n\n## Approach Selection Framework\n\n| Approach | Privacy Guarantee | Data Utility | Computational Cost | Trust Model |\n|----------|-------------------|-------------|-------------------|-------------|\n| Synthetic Data | Statistical (configurable) | High for distributions, lower for edge cases | Medium (training) | No trust required |\n| Data Clean Rooms | Contractual + technical | High (real data, restricted queries) | Low-Medium | Trusted operator |\n| Secure Enclaves (TEE) | Hardware-backed isolation | Very high (real data) | Medium | Trust hardware vendor |\n| Federated Analytics | Cryptographic\u002FDP | Medium-High | High (communication) | Minimal trust |\n| Homomorphic Encryption | Cryptographic | High | Very High | No trust required |\n| Secure Multi-Party Computation | Cryptographic | High | High | Honest majority |\n\n## Synthetic Data Generation with SDV\n\n### Architecture\n\n```\nSource Data --> Statistical Profiling --> Model Training --> Synthetic Generation\n                    |                        |                      |\n                    v                        v                      v\n            Metadata Analysis        Model Selection         Quality Assessment\n            - Column types           - GaussianCopula        - Statistical tests\n            - Distributions          - CTGAN                 - Privacy metrics\n            - Correlations           - CopulaGAN             - Utility metrics\n            - Constraints            - TVAE                  - Visual comparison\n```\n\n### SDV Implementation\n\n```python\n\"\"\"\nSynthetic data generation using the Synthetic Data Vault (SDV) library.\nGenerates privacy-preserving synthetic datasets that maintain statistical\nproperties of the original data.\n\"\"\"\n\nimport pandas as pd\nimport numpy as np\nfrom sdv.metadata import SingleTableMetadata\nfrom sdv.single_table import GaussianCopulaSynthesizer, CTGANSynthesizer, TVAESynthesizer\nfrom sdv.evaluation.single_table import run_diagnostic, evaluate_quality\nfrom sdmetrics.reports.single_table import QualityReport\n\n\ndef create_metadata(df: pd.DataFrame) -> SingleTableMetadata:\n    \"\"\"Auto-detect and create metadata for a DataFrame.\"\"\"\n    metadata = SingleTableMetadata()\n    metadata.detect_from_dataframe(df)\n    return metadata\n\n\ndef train_gaussian_copula(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    enforce_min_max: bool = True\n) -> GaussianCopulaSynthesizer:\n    \"\"\"\n    Train a Gaussian Copula model for synthetic data generation.\n    Best for: Datasets with mostly numerical data and linear correlations.\n    \"\"\"\n    synthesizer = GaussianCopulaSynthesizer(\n        metadata,\n        enforce_min_max_values=enforce_min_max,\n        numerical_distributions={\n            \"norm\": \"beta\",  # Fit beta distributions for bounded numerical data\n        }\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef train_ctgan(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    epochs: int = 300,\n    batch_size: int = 500\n) -> CTGANSynthesizer:\n    \"\"\"\n    Train a CTGAN model for synthetic data generation.\n    Best for: Complex distributions, mixed data types, mode-specific patterns.\n    \"\"\"\n    synthesizer = CTGANSynthesizer(\n        metadata,\n        epochs=epochs,\n        batch_size=batch_size,\n        verbose=True\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef train_tvae(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    epochs: int = 300\n) -> TVAESynthesizer:\n    \"\"\"\n    Train a TVAE model for synthetic data generation.\n    Best for: Datasets where CTGAN struggles, faster training than CTGAN.\n    \"\"\"\n    synthesizer = TVAESynthesizer(\n        metadata,\n        epochs=epochs\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef generate_synthetic_data(\n    synthesizer,\n    num_rows: int\n) -> pd.DataFrame:\n    \"\"\"Generate synthetic data from a trained synthesizer.\"\"\"\n    return synthesizer.sample(num_rows=num_rows)\n\n\ndef evaluate_synthetic_quality(\n    real_data: pd.DataFrame,\n    synthetic_data: pd.DataFrame,\n    metadata: SingleTableMetadata\n) -> dict:\n    \"\"\"\n    Evaluate the quality of synthetic data against real data.\n\n    Returns diagnostic and quality scores.\n    \"\"\"\n    # Run diagnostic checks\n    diagnostic = run_diagnostic(\n        real_data=real_data,\n        synthetic_data=synthetic_data,\n        metadata=metadata\n    )\n\n    # Run quality evaluation\n    quality = evaluate_quality(\n        real_data=real_data,\n        synthetic_data=synthetic_data,\n        metadata=metadata\n    )\n\n    return {\n        \"diagnostic_score\": diagnostic.get_score(),\n        \"quality_score\": quality.get_score(),\n    }\n\n\ndef measure_privacy_risk(\n    real_data: pd.DataFrame,\n    synthetic_data: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    key_fields: list[str]\n) -> dict:\n    \"\"\"\n    Measure re-identification risk in synthetic data.\n\n    Checks for exact matches and nearest-neighbor distances\n    between real and synthetic records.\n    \"\"\"\n    # Check for exact record matches\n    merged = real_data.merge(synthetic_data, how=\"inner\")\n    exact_match_rate = len(merged) \u002F len(real_data)\n\n    # Check key field matches\n    if key_fields:\n        key_merged = real_data[key_fields].merge(\n            synthetic_data[key_fields], how=\"inner\"\n        )\n        key_match_rate = len(key_merged) \u002F len(real_data)\n    else:\n        key_match_rate = 0.0\n\n    return {\n        \"exact_match_rate\": exact_match_rate,\n        \"key_match_rate\": key_match_rate,\n        \"privacy_safe\": exact_match_rate \u003C 0.01 and key_match_rate \u003C 0.05,\n    }\n```\n\n### Model Selection Guide\n\n| Factor | GaussianCopula | CTGAN | TVAE |\n|--------|---------------|-------|------|\n| Training speed | Fast (minutes) | Slow (hours) | Medium (30-60 min) |\n| Small datasets (\u003C1K rows) | Good | Poor | Fair |\n| Large datasets (>100K rows) | Good | Good | Good |\n| Numerical data | Excellent | Good | Good |\n| Categorical data (high cardinality) | Fair | Good | Good |\n| Complex correlations | Fair | Good | Good |\n| Constraint handling | Good | Fair | Fair |\n| Reproducibility | Excellent | Fair (seed-dependent) | Fair |\n\n## Data Clean Room Architecture\n\n### Components\n\n```\nOrganization A                    Clean Room                    Organization B\n+-------------+    encrypted    +------------------+    encrypted    +-------------+\n| Source Data  |  ----------->  | Ingestion Layer  |  \u003C-----------  | Source Data  |\n+-------------+                 +------------------+                 +-------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Data Preparation |\n                                | - Schema mapping |\n                                | - Normalization  |\n                                | - Deduplication  |\n                                +------------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Approved Queries |\n                                | - Pre-approved   |\n                                |   query templates|\n                                | - Aggregate only |\n                                | - Min group size |\n                                +------------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Output Validation|\n                                | - k-anonymity    |\n                                | - DP noise       |\n                                | - Disclosure risk|\n                                +------------------+\n                                        |\n                            +-----------+-----------+\n                            |                       |\n                            v                       v\n                    Results for Org A        Results for Org B\n```\n\n### Clean Room Policy Engine\n\n```python\n\"\"\"\nPolicy engine for data clean room query validation.\nEnforces privacy rules on all queries before execution.\n\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass CleanRoomPolicy:\n    min_group_size: int = 50\n    allowed_operations: list[str] = None\n    blocked_columns: list[str] = None\n    max_output_rows: int = 1000\n    require_aggregation: bool = True\n    dp_epsilon: float = 1.0\n\n    def __post_init__(self):\n        if self.allowed_operations is None:\n            self.allowed_operations = [\"COUNT\", \"SUM\", \"AVG\", \"MEDIAN\", \"PERCENTILE\"]\n        if self.blocked_columns is None:\n            self.blocked_columns = [\"ssn\", \"email\", \"phone\", \"full_name\", \"address\"]\n\n\nclass QueryValidator:\n    \"\"\"Validate clean room queries against privacy policies.\"\"\"\n\n    def __init__(self, policy: CleanRoomPolicy):\n        self.policy = policy\n\n    def validate(self, query_ast: dict) -> tuple[bool, list[str]]:\n        \"\"\"\n        Validate a parsed query against the policy.\n\n        Returns (is_valid, list_of_violations).\n        \"\"\"\n        violations = []\n\n        # Check for blocked columns\n        referenced_columns = query_ast.get(\"columns\", [])\n        for col in referenced_columns:\n            if col.lower() in self.policy.blocked_columns:\n                violations.append(f\"Column '{col}' is blocked by policy\")\n\n        # Check aggregation requirement\n        if self.policy.require_aggregation:\n            if not query_ast.get(\"has_aggregation\", False):\n                violations.append(\"Query must include aggregation (no raw record output)\")\n\n        # Check operations\n        operations = query_ast.get(\"operations\", [])\n        for op in operations:\n            if op.upper() not in self.policy.allowed_operations:\n                violations.append(f\"Operation '{op}' is not in allowed operations list\")\n\n        # Check output size\n        if query_ast.get(\"limit\", float(\"inf\")) > self.policy.max_output_rows:\n            violations.append(\n                f\"Output exceeds max rows ({self.policy.max_output_rows})\"\n            )\n\n        return (len(violations) == 0, violations)\n```\n\n## Secure Enclave Integration\n\n### Intel SGX \u002F Azure Confidential Computing\n\n```\nData Owner A           Confidential Computing          Data Owner B\n                       +----------------------+\nData (encrypted) ----> | Enclave Environment  | \u003C---- Data (encrypted)\n                       | - Decryption in TEE  |\n                       | - Join\u002FAnalysis      |\n                       | - Re-encrypt results |\n                       +----------------------+\n                               |\n                       Encrypted Results\n                       (only to authorized parties)\n```\n\n### Key Properties\n- **Confidentiality**: Data is encrypted outside the enclave; only decrypted within the TEE\n- **Integrity**: Enclave code is measured and attested; tampering is detectable\n- **Attestation**: Remote parties can verify the enclave is running approved code\n- **Isolation**: Even the cloud provider cannot access data inside the enclave\n\n## Utility Measurement Framework\n\n### Statistical Utility Metrics\n\n| Metric | Description | Target |\n|--------|-------------|--------|\n| Column Shapes | Distribution similarity per column (KS test) | > 0.85 |\n| Column Pair Trends | Correlation preservation between column pairs | > 0.80 |\n| Boundary Adherence | Values within real data min\u002Fmax ranges | > 0.95 |\n| Category Coverage | All categories in real data appear in synthetic | > 0.90 |\n| Range Coverage | Numeric ranges adequately represented | > 0.85 |\n\n### Privacy Metrics\n\n| Metric | Description | Target |\n|--------|-------------|--------|\n| Exact Match Rate | % of synthetic records identical to real records | \u003C 1% |\n| Nearest Neighbor Distance | Minimum distance from synthetic to nearest real record | > threshold |\n| Membership Inference AUC | Ability of attack model to determine membership | \u003C 0.55 |\n| Attribute Inference Accuracy | Ability to infer sensitive attributes | \u003C random + 5% |\n| k-Anonymity of output | Minimum equivalence class size | k >= 5 |\n\n## References\n\n- Patki, N., Wedge, R., and Veeramachaneni, K. \"The Synthetic Data Vault.\" IEEE DSAA, 2016.\n- SDV Documentation: docs.sdv.dev\n- Xu, L. et al. \"Modeling Tabular Data Using Conditional GAN.\" NeurIPS, 2019.\n- Google BigQuery Clean Rooms Documentation\n- AWS Clean Rooms Service Documentation\n- Microsoft Azure Confidential Computing Documentation\n- Stadler, T. et al. \"Synthetic Data — Anonymisation Groundhog Day.\" USENIX Security, 2022.\n","# Privacy-Preserving Data Sharing Platform\n\n## Overview\n\nPrivacy-preserving data sharing enables organizations to derive analytical value from combined datasets without exposing raw personal data. This skill covers four primary approaches: synthetic data generation, data clean rooms, secure enclaves, and federated analytics, along with utility measurement frameworks to ensure shared data remains useful.\n\n## Approach Selection Framework\n\n| Approach | Privacy Guarantee | Data Utility | Computational Cost | Trust Model |\n|----------|-------------------|-------------|-------------------|-------------|\n| Synthetic Data | Statistical (configurable) | High for distributions, lower for edge cases | Medium (training) | No trust required |\n| Data Clean Rooms | Contractual + technical | High (real data, restricted queries) | Low-Medium | Trusted operator |\n| Secure Enclaves (TEE) | Hardware-backed isolation | Very high (real data) | Medium | Trust hardware vendor |\n| Federated Analytics | Cryptographic\u002FDP | Medium-High | High (communication) | Minimal trust |\n| Homomorphic Encryption | Cryptographic | High | Very High | No trust required |\n| Secure Multi-Party Computation | Cryptographic | High | High | Honest majority |\n\n## Synthetic Data Generation with SDV\n\n### Architecture\n\n```\nSource Data --> Statistical Profiling --> Model Training --> Synthetic Generation\n                    |                        |                      |\n                    v                        v                      v\n            Metadata Analysis        Model Selection         Quality Assessment\n            - Column types           - GaussianCopula        - Statistical tests\n            - Distributions          - CTGAN                 - Privacy metrics\n            - Correlations           - CopulaGAN             - Utility metrics\n            - Constraints            - TVAE                  - Visual comparison\n```\n\n### SDV Implementation\n\n```python\n\"\"\"\nSynthetic data generation using the Synthetic Data Vault (SDV) library.\nGenerates privacy-preserving synthetic datasets that maintain statistical\nproperties of the original data.\n\"\"\"\n\nimport pandas as pd\nimport numpy as np\nfrom sdv.metadata import SingleTableMetadata\nfrom sdv.single_table import GaussianCopulaSynthesizer, CTGANSynthesizer, TVAESynthesizer\nfrom sdv.evaluation.single_table import run_diagnostic, evaluate_quality\nfrom sdmetrics.reports.single_table import QualityReport\n\n\ndef create_metadata(df: pd.DataFrame) -> SingleTableMetadata:\n    \"\"\"Auto-detect and create metadata for a DataFrame.\"\"\"\n    metadata = SingleTableMetadata()\n    metadata.detect_from_dataframe(df)\n    return metadata\n\n\ndef train_gaussian_copula(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    enforce_min_max: bool = True\n) -> GaussianCopulaSynthesizer:\n    \"\"\"\n    Train a Gaussian Copula model for synthetic data generation.\n    Best for: Datasets with mostly numerical data and linear correlations.\n    \"\"\"\n    synthesizer = GaussianCopulaSynthesizer(\n        metadata,\n        enforce_min_max_values=enforce_min_max,\n        numerical_distributions={\n            \"norm\": \"beta\",  # Fit beta distributions for bounded numerical data\n        }\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef train_ctgan(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    epochs: int = 300,\n    batch_size: int = 500\n) -> CTGANSynthesizer:\n    \"\"\"\n    Train a CTGAN model for synthetic data generation.\n    Best for: Complex distributions, mixed data types, mode-specific patterns.\n    \"\"\"\n    synthesizer = CTGANSynthesizer(\n        metadata,\n        epochs=epochs,\n        batch_size=batch_size,\n        verbose=True\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef train_tvae(\n    df: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    epochs: int = 300\n) -> TVAESynthesizer:\n    \"\"\"\n    Train a TVAE model for synthetic data generation.\n    Best for: Datasets where CTGAN struggles, faster training than CTGAN.\n    \"\"\"\n    synthesizer = TVAESynthesizer(\n        metadata,\n        epochs=epochs\n    )\n    synthesizer.fit(df)\n    return synthesizer\n\n\ndef generate_synthetic_data(\n    synthesizer,\n    num_rows: int\n) -> pd.DataFrame:\n    \"\"\"Generate synthetic data from a trained synthesizer.\"\"\"\n    return synthesizer.sample(num_rows=num_rows)\n\n\ndef evaluate_synthetic_quality(\n    real_data: pd.DataFrame,\n    synthetic_data: pd.DataFrame,\n    metadata: SingleTableMetadata\n) -> dict:\n    \"\"\"\n    Evaluate the quality of synthetic data against real data.\n\n    Returns diagnostic and quality scores.\n    \"\"\"\n    # Run diagnostic checks\n    diagnostic = run_diagnostic(\n        real_data=real_data,\n        synthetic_data=synthetic_data,\n        metadata=metadata\n    )\n\n    # Run quality evaluation\n    quality = evaluate_quality(\n        real_data=real_data,\n        synthetic_data=synthetic_data,\n        metadata=metadata\n    )\n\n    return {\n        \"diagnostic_score\": diagnostic.get_score(),\n        \"quality_score\": quality.get_score(),\n    }\n\n\ndef measure_privacy_risk(\n    real_data: pd.DataFrame,\n    synthetic_data: pd.DataFrame,\n    metadata: SingleTableMetadata,\n    key_fields: list[str]\n) -> dict:\n    \"\"\"\n    Measure re-identification risk in synthetic data.\n\n    Checks for exact matches and nearest-neighbor distances\n    between real and synthetic records.\n    \"\"\"\n    # Check for exact record matches\n    merged = real_data.merge(synthetic_data, how=\"inner\")\n    exact_match_rate = len(merged) \u002F len(real_data)\n\n    # Check key field matches\n    if key_fields:\n        key_merged = real_data[key_fields].merge(\n            synthetic_data[key_fields], how=\"inner\"\n        )\n        key_match_rate = len(key_merged) \u002F len(real_data)\n    else:\n        key_match_rate = 0.0\n\n    return {\n        \"exact_match_rate\": exact_match_rate,\n        \"key_match_rate\": key_match_rate,\n        \"privacy_safe\": exact_match_rate \u003C 0.01 and key_match_rate \u003C 0.05,\n    }\n```\n\n### Model Selection Guide\n\n| Factor | GaussianCopula | CTGAN | TVAE |\n|--------|---------------|-------|------|\n| Training speed | Fast (minutes) | Slow (hours) | Medium (30-60 min) |\n| Small datasets (\u003C1K rows) | Good | Poor | Fair |\n| Large datasets (>100K rows) | Good | Good | Good |\n| Numerical data | Excellent | Good | Good |\n| Categorical data (high cardinality) | Fair | Good | Good |\n| Complex correlations | Fair | Good | Good |\n| Constraint handling | Good | Fair | Fair |\n| Reproducibility | Excellent | Fair (seed-dependent) | Fair |\n\n## Data Clean Room Architecture\n\n### Components\n\n```\nOrganization A                    Clean Room                    Organization B\n+-------------+    encrypted    +------------------+    encrypted    +-------------+\n| Source Data  |  ----------->  | Ingestion Layer  |  \u003C-----------  | Source Data  |\n+-------------+                 +------------------+                 +-------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Data Preparation |\n                                | - Schema mapping |\n                                | - Normalization  |\n                                | - Deduplication  |\n                                +------------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Approved Queries |\n                                | - Pre-approved   |\n                                |   query templates|\n                                | - Aggregate only |\n                                | - Min group size |\n                                +------------------+\n                                        |\n                                        v\n                                +------------------+\n                                | Output Validation|\n                                | - k-anonymity    |\n                                | - DP noise       |\n                                | - Disclosure risk|\n                                +------------------+\n                                        |\n                            +-----------+-----------+\n                            |                       |\n                            v                       v\n                    Results for Org A        Results for Org B\n```\n\n### Clean Room Policy Engine\n\n```python\n\"\"\"\nPolicy engine for data clean room query validation.\nEnforces privacy rules on all queries before execution.\n\"\"\"\n\nfrom dataclasses import dataclass\n\n\n@dataclass\nclass CleanRoomPolicy:\n    min_group_size: int = 50\n    allowed_operations: list[str] = None\n    blocked_columns: list[str] = None\n    max_output_rows: int = 1000\n    require_aggregation: bool = True\n    dp_epsilon: float = 1.0\n\n    def __post_init__(self):\n        if self.allowed_operations is None:\n            self.allowed_operations = [\"COUNT\", \"SUM\", \"AVG\", \"MEDIAN\", \"PERCENTILE\"]\n        if self.blocked_columns is None:\n            self.blocked_columns = [\"ssn\", \"email\", \"phone\", \"full_name\", \"address\"]\n\n\nclass QueryValidator:\n    \"\"\"Validate clean room queries against privacy policies.\"\"\"\n\n    def __init__(self, policy: CleanRoomPolicy):\n        self.policy = policy\n\n    def validate(self, query_ast: dict) -> tuple[bool, list[str]]:\n        \"\"\"\n        Validate a parsed query against the policy.\n\n        Returns (is_valid, list_of_violations).\n        \"\"\"\n        violations = []\n\n        # Check for blocked columns\n        referenced_columns = query_ast.get(\"columns\", [])\n        for col in referenced_columns:\n            if col.lower() in self.policy.blocked_columns:\n                violations.append(f\"Column '{col}' is blocked by policy\")\n\n        # Check aggregation requirement\n        if self.policy.require_aggregation:\n            if not query_ast.get(\"has_aggregation\", False):\n                violations.append(\"Query must include aggregation (no raw record output)\")\n\n        # Check operations\n        operations = query_ast.get(\"operations\", [])\n        for op in operations:\n            if op.upper() not in self.policy.allowed_operations:\n                violations.append(f\"Operation '{op}' is not in allowed operations list\")\n\n        # Check output size\n        if query_ast.get(\"limit\", float(\"inf\")) > self.policy.max_output_rows:\n            violations.append(\n                f\"Output exceeds max rows ({self.policy.max_output_rows})\"\n            )\n\n        return (len(violations) == 0, violations)\n```\n\n## Secure Enclave Integration\n\n### Intel SGX \u002F Azure Confidential Computing\n\n```\nData Owner A           Confidential Computing          Data Owner B\n                       +----------------------+\nData (encrypted) ----> | Enclave Environment  | \u003C---- Data (encrypted)\n                       | - Decryption in TEE  |\n                       | - Join\u002FAnalysis      |\n                       | - Re-encrypt results |\n                       +----------------------+\n                               |\n                       Encrypted Results\n                       (only to authorized parties)\n```\n\n### Key Properties\n- **Confidentiality**: Data is encrypted outside the enclave; only decrypted within the TEE\n- **Integrity**: Enclave code is measured and attested; tampering is detectable\n- **Attestation**: Remote parties can verify the enclave is running approved code\n- **Isolation**: Even the cloud provider cannot access data inside the enclave\n\n## Utility Measurement Framework\n\n### Statistical Utility Metrics\n\n| Metric | Description | Target |\n|--------|-------------|--------|\n| Column Shapes | Distribution similarity per column (KS test) | > 0.85 |\n| Column Pair Trends | Correlation preservation between column pairs | > 0.80 |\n| Boundary Adherence | Values within real data min\u002Fmax ranges | > 0.95 |\n| Category Coverage | All categories in real data appear in synthetic | > 0.90 |\n| Range Coverage | Numeric ranges adequately represented | > 0.85 |\n\n### Privacy Metrics\n\n| Metric | Description | Target |\n|--------|-------------|--------|\n| Exact Match Rate | % of synthetic records identical to real records | \u003C 1% |\n| Nearest Neighbor Distance | Minimum distance from synthetic to nearest real record | > threshold |\n| Membership Inference AUC | Ability of attack model to determine membership | \u003C 0.55 |\n| Attribute Inference Accuracy | Ability to infer sensitive attributes | \u003C random + 5% |\n| k-Anonymity of output | Minimum equivalence class size | k >= 5 |\n\n## References\n\n- Patki, N., Wedge, R., and Veeramachaneni, K. \"The Synthetic Data Vault.\" IEEE DSAA, 2016.\n- SDV Documentation: docs.sdv.dev\n- Xu, L. et al. \"Modeling Tabular Data Using Conditional GAN.\" NeurIPS, 2019.\n- Google BigQuery Clean Rooms Documentation\n- AWS Clean Rooms Service Documentation\n- Microsoft Azure Confidential Computing Documentation\n- Stadler, T. et al. \"Synthetic Data — Anonymisation Groundhog Day.\" USENIX Security, 2022.\n",{"name":5,"license":15,"metadata":38,"description":7},{"tags":39,"author":9,"domain":24,"version":40,"subdomain":41},"data-sharing, synthetic-data, data-clean-rooms, secure-enclaves, sdv-library","1.0","privacy-engineering","main","9b2ef9eae161c00a17241d42a388571321b33e9f","plugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing",68,"https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills","https:\u002F\u002Fgithub.com\u002Fmukul975","Mahipal.engineer","🔐 Cybersecurity | 💻 Dev | 📷 Street Photographer\r\n🎓 MSc | 📚 Research & AI Security","2026-03-17 04:06:52",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add mukul975\u002FPrivacy-Data-Protection-Skills --skill privacy-data-sharing",{"tool":57,"command":58},"bunx","bunx skills add mukul975\u002FPrivacy-Data-Protection-Skills --skill privacy-data-sharing",{"tool":60,"command":61},"pnpm","pnpm dlx skills add mukul975\u002FPrivacy-Data-Protection-Skills --skill privacy-data-sharing","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002FSKILL.md",true,[65,71,77,81],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"assets\u002Ftemplate.md","ASSET","资产文件",991,"https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002Fassets\u002Ftemplate.md",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"references\u002Fstandards.md","REFERENCE","参考文档",886,"https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002Freferences\u002Fstandards.md",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fworkflows.md",1684,"https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002Freferences\u002Fworkflows.md",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"scripts\u002Fprocess.py","SCRIPT","脚本",5829,"https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fplugins\u002Fprivacy-engineering-skills\u002Fskills\u002Fprivacy-data-sharing\u002Fscripts\u002Fprocess.py",[88,114,129,142,159,172],{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":105,"publishedAt":33},"01M6AG6K8R3XW10ENWH2FH18RH","workplace-email-privacy","Implements email and internet monitoring compliance in the workplace per Barbulescu v Romania (ECHR Grand Chamber), EDPB guidance, and national labour law. Covers acceptable use policies, legitimate expectation of privacy, proportionality testing, and content vs metadata monitoring. Keywords: email monitoring, Barbulescu, workplace privacy, internet monitoring, acceptable use policy, ECHR, proportionality.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fworkplace-email-privacy\u002FSKILL.md",[94,99,102],{"categoryNo":95,"categoryName":96,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",{"categoryNo":100,"categoryName":101,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000037","律师与法务",[106,107,24,108,109,25,110,111,112,113],"email","workplace email privacy","compliance","content","policy","testing","monitoring","metadata",{"skillNo":115,"name":116,"nameZh":6,"description":117,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":118,"categories":119,"keywords":122,"publishedAt":33},"01M6AG6FRCBJY7D061BJZMNV49","whistleblower-data","Implements data protection compliance for whistleblowing systems under EU Directive 2019\u002F1937 and GDPR. Covers anonymous reporting channels, identity protection for whistleblowers and accused persons, retention limits, access restrictions, and retaliation prevention. Addresses national transpositions and DPA guidance. Keywords: whistleblower, Directive 2019\u002F1937, anonymous reporting, identity protection, retaliation, retention, reporting channel.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fwhistleblower-data\u002FSKILL.md",[120,121],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[25,123,124,125,108,126,127,24,128],"whistleblower data","identity","reporting","data protection","gdpr","prevention",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":136,"publishedAt":33},"01M6AG6CJP0PW3X65HC7VP9SR9","vendor-termination-data","Vendor termination data return and deletion procedures per GDPR Article 28(3)(g). Covers data extraction formats, deletion certification requirements, transition planning, residual data handling, and post-termination verification.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fvendor-termination-data\u002FSKILL.md",[135],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[25,137,138,139,140,127,24,141],"vendor termination data","planning","verification","extraction","certification",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":149,"publishedAt":33},"01M6AG69E277DXZB2NF6KV17ZA","vendor-risk-scoring","Vendor privacy risk tiering methodology for processor management. Covers scoring factors including data volume, sensitivity, transfer locations, certifications, breach history, and control maturity with weighted risk calculation and tier assignment.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fvendor-risk-scoring\u002FSKILL.md",[148],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[150,151,152,153,154,155,156,157,24,25,158],"vendor risk scoring","risk","risk scoring","methodology","risk-scoring","assessment","transfer","certifications","processor",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":166,"publishedAt":33},"01M6AG6655ABFKT2BBWHCP4PAT","vendor-privacy-due-diligence","Pre-contract vendor privacy due diligence per GDPR Article 28(1). Covers risk questionnaires, technical controls assessment, certification review, data flow analysis, and documented sufficiency decisions for processor engagement.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fvendor-privacy-due-diligence\u002FSKILL.md",[165],{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[24,167,127,168,155,169,170,25,158,151,141,171],"vendor privacy due diligence","review","onboarding","flow","analysis",{"skillNo":173,"name":174,"nameZh":6,"description":175,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":176,"categories":177,"keywords":185,"publishedAt":33},"01M6AG62C3VD8SYNGH4N7RHZTE","vendor-privacy-audit","On-site and remote vendor audit procedures per GDPR Article 28(3)(h). Covers audit planning, evidence collection methodologies, finding classification, remediation tracking, and audit report generation for processor compliance verification.","https:\u002F\u002Fgithub.com\u002Fmukul975\u002FPrivacy-Data-Protection-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fprivacy\u002Fvendor-privacy-audit\u002FSKILL.md",[178,181,184],{"categoryNo":179,"categoryName":180,"taxonomyType":97,"taxonomyTypeDesc":98},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":182,"categoryName":183,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000036","内容创作者",{"categoryNo":103,"categoryName":104,"taxonomyType":21,"taxonomyTypeDesc":22},[186,187,24,188,139,189,108,127,190,158,191,192,193,138],"vendor privacy audit","audit","report","audit report","remediation","collection","remediation-tracking","classification"]